为什么这个RegEx在JavaScript中不起作用?

时间:2011-11-25 15:57:33

标签: javascript regex

我正在尝试在以下语句中将两个括号之间的文本“foo”匹配:

  

期待[foo]但收到了[__]

然后我尝试用“......”替换文本。当我运行以下代码时,我在JavaScript中得到一个无效的分组错误。当我在Regexr中运行表达式时,它按照我期望的方式工作。

var text = $("#assertion").html().replace( /(?<=Expected \[).*(?=\] )/,"...");

http://jsfiddle.net/bittersweetryan/VcraW/

2 个答案:

答案 0 :(得分:7)

Javascript正则表达式不了解回顾(?<=)。您需要明确地匹配Expected [部分:

replace(/(Expected \[)[^\]]*/, "$1...")

$ 1是为了避免重新输入“Expected [”部分而我更改了正则表达式的其余部分以避免与.*贪婪匹配

http://jsfiddle.net/VcraW/2/

答案 1 :(得分:4)

因为javascript不支持断言后面的内容。

您可以通过将其放入捕获组并在替换

中使用它来解决
.replace( /(Expected \[).*(?=\] )/,"$1...");

第一对括号的内容存储在捕获组1中,您可以使用$1

将其取回