JavaScript中的负回顾后发表达式

5
我想匹配所有以@开头的字符串,除非它们前面还有其他字符。简单的例子:在 @one @two and bla@three 中,我想匹配 @one@two,但不匹配@three。这是为了在聊天室中突出显示用户名。
这些字符串可以出现在句子的任何位置(开头或中间)。
我原本认为(?![a-zA-Z])@[a-zA-Z]+应该可以工作,但它仍然会匹配@three

4
你需要的是负向回顾,而不是负向前瞻。但是 JavaScript 并没有这个功能。参考 https://dev59.com/XnRB5IYBdhLWcg3wXmVI 上的解决方法。 - Barmar
2
所以,你基本上是在寻找一个匹配前面有空格的“@something”的模式?或者换句话说:除了空格之外,还应该允许哪些字符出现在“@”前面? - S.B.
4
“/(?:^| )(@\S+)/”应该是非常合适的,如果分隔符不只是空格,那么可以使用“@[a-z]+”。 - raina77ow
1
那就是 /(^| )@[a-z]+/ig 了... :) - S.B.
1
@raina77ow 看起来你做得很好 :) http://regex101.com/r/gE5cE4 - Jason Sperske
显示剩余6条评论
1个回答

5
您不需要使用正则表达式的look around,您可以使用类似于这样的简单正则表达式:
\B@\w+

工作演示

这里输入图片描述


作为另一个例子:如果你在RegExr网站上点击左侧的“reference”,然后选择“anchors”,它会解释\b。RegExr是我创建正则表达式的首选,因为参考指南就在那里,而且不会妨碍操作。 - zfrisch
@MicTech 你可以使用 (?<=^| )@\w+ - Federico Piazza
@FedericoPiazza JavaScript不支持这个。 - MicTech
@MicTech 是的,我忘了那个。不管怎样,这个问题是一年前发布的,也被标记为已解决,所以我猜已经解决了 OP 的问题。 - Federico Piazza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接