我正在尝试在 JavaScript 中创建一个正则表达式来匹配每个未转义的特定字符。
在这里,我正在查找所有 '
字符。它们可以位于字符串的开头或结尾,并且是连续的。
例如:
'abc''abc\'abc
我应该得到 3 个匹配项:第 1 个、第 5 个和第 6 个字符。但逃脱的不是第 11 个。
最佳答案
您必须考虑诸如应该匹配的 \\'
和不应该匹配的 \\'
等情况。但是 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>
关于javascript - JS Regex - 匹配每个未转义的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28889373/