Javascript Don';如果特定单词前面有字符加空格,则不匹配

Javascript Don';如果特定单词前面有字符加空格,则不匹配,javascript,regex,Javascript,Regex,此正则表达式前面有逗号和空格时与“so”匹配: (,\s)(so) 我现在想做相反的事情。我想告诉正则表达式:如果前面有逗号和空格,就不要匹配“so”。我试过这个(在看到这么多问题之后): 但是现在正则表达式与任何内容都不匹配: 注意:我没有试图匹配行的开头。或者,如果可以的话,您可以简单地使用alternation,并使用一个不带lookaround的表达式,例如: , so|(\bso\b) const regex=/,so |(\bso\b)/gmi; const str=`因此 大

此正则表达式前面有逗号和空格时与“so”匹配:

(,\s)(so)
我现在想做相反的事情。我想告诉正则表达式:如果前面有逗号和空格,就不要匹配“so”。我试过这个(在看到这么多问题之后):

但是现在正则表达式与任何内容都不匹配:


注意:我没有试图匹配行的开头。

或者,如果可以的话,您可以简单地使用alternation,并使用一个不带lookaround的表达式,例如:

, so|(\bso\b)
const regex=/,so |(\bso\b)/gmi;
const str=`因此
大到
所以
而不是,所以
,一般`;
让m;
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
log(`Found match,group${groupIndex}:${match}`);
});

}
正如anubhava在评论中提到的,使用反向查找,您可以执行
/(?,这将匹配
so
,前面没有逗号和空格(并捕获
so
)。这与
/(?)相反?
我想告诉正则表达式:如果前面有逗号和空格,就不要匹配“so”

最好的解决方案是使用负面回顾,正如我在下面问题的评论中提到的:

^(,\s)(so)
/(?<!, )so/g

在这里,匹配是通过在每个匹配中存在捕获组#1来定义的。我们正在匹配并丢弃
”的不需要的匹配,因此
位于交替的左侧。我们所需的匹配字符串位于交替的右侧,它在组#1中捕获

代码:

var arr=['因此',
“太大了”,
",一般",;
常量正则表达式=/(?:,so |(\bso))\b/g;
arr.forEach((el)=>{
m=正则表达式执行(el);
如果(米和米长度>1)
log('Line;[',el,']Start:',regex.lastIndex,m[1])

})
您可以使用负前瞻
/(?但它仅在现代浏览器中受支持。OP没有尝试匹配行的开头,他们(错误地)猜测了否定运算符(通过与字符类否定的类比)。这是不正确的,因为它将无法匹配
中的第二个
so
,所以so
抱歉,但我使用的是Atom的regex搜索…不是JavaScript程序…那么为什么要标记为而不是?!谢谢,但我使用的是Atom的regex搜索功能,所以我无法选择组。如果Atom的regex引擎支持lookbehind,那么这将是最好的解决方案.噢,我更新了Aom,现在反向查找似乎可以工作了。谢谢。很好,反向查找是满足此要求的最佳解决方案。
/(?:, so|(\bso))\b/g