我想写一个能捕获所有双引号的正则表达式"在一个字符串中,除了那些被转义的。
例如,在以下String中将仅返回第一个引号:
"HELLO\"\"\"
但是以下一个将返回3场比赛:
"HELLO\"\""\""
我使用了以下表达式,但由于在JavaScript中没有负面的背后隐藏我被困住了:
(?<!\\)"
我看过类似的问题,但大多数都提供了程序化界面。我不想使用编程接口,因为我使用的是Ace编辑器,解决我的问题的最简单方法是定义这个正则表达式。
我认为没有通用的选择,因为我已经尝试过针对类似问题提出的替代方案,但其中没有完全符合我的情况。
感谢您的回答!
答案 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++
。