JS Regex - 匹配每个未转义的特定字符

时间:2015-03-05 22:51:01

标签: javascript regex

我试图在JavaScript中创建一个正则表达式来匹配每个未转义的特定字符。

我在这里寻找所有'个字符。它们可以位于字符串的开头或结尾,也可以是连续的。

E.g:

'abc''abc\'abc

我应该得到3场比赛:第1,第5和第6个角色。但不是第11次逃脱。

2 个答案:

答案 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