Javascript正则表达式:如何模拟;匹配而不捕获”;积极回头看的行为?

Javascript正则表达式:如何模拟;匹配而不捕获”;积极回头看的行为?,javascript,regex,Javascript,Regex,我有一个相对简单的正则表达式问题——我需要匹配字符串中的特定单词,如果它们是完整的单词或前缀。有了单词边界,它看起来像这样: \b(word1|word2|prefix1|prefix2) 但是,我不能使用单词边界条件,因为有些单词可能以奇数字符开头,例如..999 我的解决方案是为这些奇怪的情况寻找空白或起始标记 (\b|^|\s)(word1|word2|prefix1|prefix2) 现在,像.999这样的单词仍能正确匹配,但它也能捕获匹配单词/前缀前的空白。就我而言,我不能让它捕捉

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

\b(word1|word2|prefix1|prefix2)
但是,我不能使用单词边界条件,因为有些单词可能以奇数字符开头,例如..999

我的解决方案是为这些奇怪的情况寻找空白或起始标记

(\b|^|\s)(word1|word2|prefix1|prefix2)
现在,像.999这样的单词仍能正确匹配,但它也能捕获匹配单词/前缀前的空白。就我而言,我不能让它捕捉空白


正面的lookbehinds似乎可以解决这个问题,但是javascript不支持它们。是否有其他方法可以获得相同的行为来解决此问题?

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

更新:

基于您想用什么替换它(以及@Alanmore关于
\b
的优点),您可能需要这样做:

var regex = /(^|\s)(word1|word2|prefix1|prefix2)/g;
myString.replace(regex,"$1<span>$2</span>");
var regex=/(^ |\s)(word1 | word2 | prefix1 | prefix2)/g;
myString.replace(regex,“$1$2”);

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

让我们先了解一下术语。正则表达式通常使用它匹配的所有内容。当您执行
replace()
时,所使用的所有内容都将被覆盖。您还可以单独捕获部分匹配文本,并使用
$1
$2
等将其重新插入

当您使用单词boundary时,您不必担心这个问题,因为
\b
不会消耗任何东西。但是现在如果有一个空白字符,你就要使用它,所以你必须把它插回去。我不知道你要用什么来替换火柴,所以在这次演示中,我将不使用任何东西来替换它们

result = subject.replace(/(^|\s)(word1|word2|prefix1|prefix2)/g, "$1");

请注意,不再需要
\b
。事实上,您必须删除它,否则它将匹配
xyz.999
中的
.999
,因为
\b
z
之间匹配。我很确定你不想那样。

你要在这里更换吗?如果没有,你就不能从结果匹配中删除任何前导空格吗?哦,我应该提到我尝试过这个。由于某种原因,它不起作用。当我使用这个正则表达式替换时,它也会替换空格。@DiglettpTo:你想用什么替换它?string.replace(regexp,“$1”);--空格被吃光了
result = subject.replace(/(^|\s)(word1|word2|prefix1|prefix2)/g, "$1");