Javascript Regex:如何模拟积极外观的"匹配无捕获"行为?

Dig*_*ato 2 javascript regex

我有一个相对简单的正则表达式问题 - 我需要匹配字符串中的特定单词,如果它们是整个单词或前缀.使用单词边界,它看起来像这样:

\b(word1|word2|prefix1|prefix2)
Run Code Online (Sandbox Code Playgroud)

但是,我不能使用单词边界条件,因为有些单词可能以奇数字符开头,例如.999

我的解决方案是为这些奇怪的情况寻找空白或启动令牌.

(\b|^|\s)(word1|word2|prefix1|prefix2)
Run Code Online (Sandbox Code Playgroud)

现在像.999这样的单词仍然可以正确匹配,但它也会捕获匹配的单词/前缀之前的空格.就我的目的而言,我无法捕获空白.

积极的lookbehinds似乎解决了这个问题,但javascript不支持它们.有没有其他方法我可以得到相同的行为来解决这个问题?

go-*_*leg 5

您可以使用以下方式使用非捕获组(?:):

/(?:\b|^|\s)(word1|word2|prefix1|prefix2)/
Run Code Online (Sandbox Code Playgroud)

更新:

根据你想要替换它的内容(以及@AlanMoore关于它的好处\b),你可能想要使用它:

var regex = /(^|\s)(word1|word2|prefix1|prefix2)/g;
myString.replace(regex,"$1<span>$2</span>");
Run Code Online (Sandbox Code Playgroud)

请注意,我将第一组更改回捕获组,因为它将成为匹配的一部分,但您希望将其保留在替换字符串中(对吗?).还添加了g修饰符,以便在字符串中的所有匹配项中发生这种情况(假设这是您想要的).