繁体   English   中英

标签和单词的边界正则表达式

[英]boundary regex for hashtag and word

我目前有一个与世界相匹配的边界正则表达式

const trigger = 'foo1 foo2'
const rx = new RegExp(`\\b${trigger}\\b`, 'i');
return rx.test(text);

这符合以下情况:

foo1 foo2          <-- exact match
bar foo1 foo2      <-- end of sentence
foo1 foo2 bar      <-- beginning of sentence

并不是

barfoo1 foo2
foo1 foo2bar
barfoo1 foo2bar

这正是我想要的标准字符串的行为

但是当trigger变为#foo ,这不起作用,因为#对字边界无效。

正则表达式由我的服务器控制,但触发器由用户控制。

如果字符串以foo1 #foo2标签开头,那么这只是一个问题,所以像foo1 #foo2这样的东西仍然有效。 我总是可以在开头删除一个标签。

如何使正则表达式支持单词和主题标签?

您可以使用(^|\\s+)表示左边界而不是($|\\s+)表示右边界,而不是使用单词边界:

const trigger = '#foo1';
text = 'hello #foo1 blah';
const rx = new RegExp(`(^|\\s+)${trigger}($|\\s+)`, 'i');
console.log(rx.test(text));

模式\\b#foo1\\b的问题在于#已经是非单词字符。 因此\\b将不会拾取哈希符号前面的空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM