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

标签 javascript node.js regex regex-lookarounds

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

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#foo1\b 模式的问题在于 # 已经是一个非单词字符。所以 \b 不会在哈希符号之前的空格上拾取。

关于javascript - 主题标签和单词的边界正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54585194/

相关文章:

c# - 需要 wpf lostfocus 事件的正则表达式

javascript - 在 Angular 的 amcharts4 中点击自定义图例切换列系列

javascript - jscrollPane 滚动条在初始加载时不出现

node.js - Couchdb 套接字在 View 中挂起

Python3正则表达式转义函数

html - 什么定义了所有非相关链接?

javascript - 为什么当我的站点打开多个选项卡时我的 setTimeout 会加快?

javascript - 悬停或单击 lavalamp jquery 菜单时如何更改链接颜色?

node.js - node-gyp:在所有子目录中运行 binding.gyp

javascript - OS X 上的 Node.js 奇怪行为(可能是模块内存限制)