Javascript:负面lookbehind的等效正则表达式?

时间:2014-10-24 14:31:03

标签: javascript regex

我想写一个能捕获所有双引号的正则表达式"在一个字符串中,除了那些被转义的。

例如,在以下String中将仅返回第一个引号:

"HELLO\"\"\"

但是以下一个将返回3场比赛:

"HELLO\"\""\""

我使用了以下表达式,但由于在JavaScript中没有负面的背后隐藏我被困住了:

(?<!\\)"

我看过类似的问题,但大多数都提供了程序化界面。我不想使用编程接口,因为我使用的是Ace编辑器,解决我的问题的最简单方法是定义这个正则表达式。

我认为没有通用的选择,因为我已经尝试过针对类似问题提出的替代方案,但其中没有完全符合我的情况。

感谢您的回答!

2 个答案:

答案 0 :(得分:1)

您可以使用此解决方法:

(^|[^\\])"

"仅当前面有任何字符但\或字符串的开头(^)。

但是要小心,这匹配两个字符:"和前面的字符(除非在字符串开头的情况下)。换句话说,如果你不想用"取代所有这些',你需要:

theString.replace(/(^|[^\\])"/g, "$1'")

答案 1 :(得分:0)

我假设你试图运行的代码:

while ( matcher = /(?<!\\)"/g.exec(theString) ) {
    // do stuff. matcher[0] is double quotes (that don't follow a backslash)
}

在JavaScript中,使用此guide to JS lookbehinds

while ( matcher = /(\\)?"/g.exec(theString) ) {
  if (!matcher[1]) {
    // do stuff.  matcher[0] is double quotes (that don't follow a backslash)
  }
}

这会查找双引号("),它可以选择使用反斜杠(\),但在实际执行反斜杠时不会起作用。

如果你只是想计算未转义的双引号的数量,那么&#34;做什么&#34; line可以是count++