我试图在JavaScript中创建一个正则表达式来匹配每个未转义的特定字符。
我在这里寻找所有'
个字符。它们可以位于字符串的开头或结尾,也可以是连续的。
E.g:
'abc''abc\'abc
我应该得到3场比赛:第1,第5和第6个角色。但不是第11次逃脱。
答案 0 :(得分:1)
您必须考虑\\'
应该匹配的案例,以及\\\'
哪些不应该匹配。但你在JS中没有lookbehinds,更不用说可变长度的lookbehinds,所以你必须使用别的东西。
使用以下正则表达式:
\\.|(')
这将匹配您要查找的所有转义字符和'
字符,但引号将位于捕获组中。
看看这个demo。你感兴趣的比赛是绿色的,要忽略的是蓝色。
然后,在JS中,忽略m
所在的每个匹配对象!m[1]
。
示例:
var input = "'abc''abc\\'abc \\\\' abc";
var re = /\\.|(')/g;
var m;
var positions = [];
while (m = re.exec(input)) {
if (m[1])
positions.push(m.index);
}
var pos = [];
for (var i = 0; i < input.length; ++i) {
pos.push(positions.indexOf(i) >= 0 ? "^" : " ");
}
document.getElementById("output").innerText = input + "\n" + pos.join("");
<pre id="output"></pre>
答案 1 :(得分:0)
您可以使用:
var s = "'abc''abc\\'abc";
var cnt=0;
s.replace(/\\?'/g, function($0) { if ($0[0] != '\\') cnt++; return $0;});
console.log(cnt);
//=> 3