Javascript hashtag和word的边界正则表达式

Javascript hashtag和word的边界正则表达式,javascript,node.js,regex,regex-lookarounds,Javascript,Node.js,Regex,Regex Lookarounds,我目前有一个与worlds匹配的边界正则表达式 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

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

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
这正是我想要的标准字符串的行为

但是,当
触发器变为
#foo
时,这不起作用,因为
#
对于单词边界无效

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

只有当字符串以hashtag开头时,这才是一个问题,因此类似
foo1#foo2
的内容仍然有效。我总是可以在一开始就去掉标签


如何使正则表达式同时支持单词和hashtags?

您可以使用
(^\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
不会在散列符号前面的空格上拾取任何内容。

真不敢相信我如此专注于单词边界,我没有想到会这样做。\b有助于标点符号,因此这个示例应该是(^ | \\s |[.!\?,:;()[]),并且您不想捕获该空格,因此需要删除结果或删除标点符号\b是非常有用的,这方面它不起作用是一个让唐尼打了70%,其中%打破了单词边界匹配
const trigger = '#foo1';
text = 'hello #foo1 blah';
const rx = new RegExp(`(^|\\s+)${trigger}($|\\s+)`, 'i');
console.log(rx.test(text));