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

标签 javascript regex

我正在尝试在 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/

相关文章:

javascript - 陷入 karma 报应验证作业(nodejs,angularjs)

java - 帮助使用 Java 和 Regex 从 html 标签中提取文本

c++ - std::regex 忽略正则表达式命令中的空格

javascript - 日期选择器和 Laravel

Python 使用 re 模块解析导入的文本文件

python - 当字符位于 unicode 范围内时,如何用空格填充字符?

javascript - React-Native 不支持正则表达式?

javascript - 使用JS调用servlet安全吗?

javascript - 帮助自定义 jQuery 验证函数

javascript - 如何使用 jquery 删除除最后 2 个之外的所有类 div?