匹配两个引号前面没有开括号

时间:2016-04-25 10:43:48

标签: javascript regex lookahead

我需要一个正则表达式匹配所有出现的两个引号(''),而不是前面的括号(()。我对括号做了一个负面的预测,然后是引用。但为什么这不起作用:

/(?!\()''/g

例如使用此字符串

(''test''test

它应匹配第二个匹配但不匹配第一个匹配但匹配两个匹配。

当我使用完全相同的解决方案但检查新行而不是支架时,它可以正常工作:

/(?!^)''/g

使用此字符串:

''test''test

它仅按预期匹配第二次出现。

经过测试here

2 个答案:

答案 0 :(得分:1)

即使您需要处理连续的双撇号,这个解决方案也能正常工作:

var output = "''(''test'''''''test".replace(/(\()?''/g, function($0, $1){
	return $1 ? $0 : 'x';
});
document.body.innerHTML = output;

此处,/(\()?''/g正则表达式搜索与(的所有匹配项,但没有,但在替换回调方法中,我们检查组1匹配。如果组1匹配且不为空,我们使用整个匹配作为替换文本($0代表整个匹配值),如果不匹配((之前没有''我们只是插入替换。

答案 1 :(得分:1)

Javascript不支持回溯,但有一种解决方法。

尝试:

[^\(]('{2,2})

请参阅https://regex101.com/r/gT5jR6/1