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



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

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 的东西仍然有效。我总是可以在开始时删除一个主题标签。

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

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

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

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

最新更新