javascript - 正则表达式非转义引号

标签 javascript regex

例如,给定:

hello"there\"boo\\\\"elephant

一般来说,我想匹配第一个和第三个引号,但不匹配中间的引号,因为中间的引号被转义了。这适用于 (?<!\\)(?:\\{2})*" ( Regex match unescaped quotes );但是,该正则表达式包括捕获组中的后视(例如 2 个斜线)。有没有办法让后视不捕获。

如果相关,我将使用 javascript,所以 \K我链接的其他 stackoverflow 帖子似乎不起作用。

编辑,澄清一下,我不想替换双引号,我只是想匹配它们。我的用例具体是查找索引,但我可以使用现有查询来做到这一点,使用类似 match.index + match[0].length - 1 的东西, 但我发现它很难看,我想更好地理解正则表达式,所以我希望有一个更简单的正则表达式来查找未转义的引号,而无需在它之前捕获任何内容。

最佳答案

在我看来,您想替换那些未转义的引号,并且不需要 \K 也不需要回溯。用相应的交替组替换 lookbehind 并使用捕获组捕获您需要恢复的内容并使用替换反向引用。

s.replace(/((?:^|[^\\])(?:\\{2})*)"/g, "$1'")

参见 regex demo .

详情

  • ((?:^|[^\\])(?:\\{2})*) - 第 1 组(可以使用 $1 访问其值> 替换模式中的占位符):
    • (?:^|[^\\]) - 字符串的开头或 \
    • 以外的任何字符
    • (?:\\{2})* - 双反斜杠出现 0 次以上
  • " - 双引号。

JS 演示:

var rx = /((?:^|[^\\])(?:\\{2})*)"/g;
var s = "hello\"there\\\"boo\\\\\\\\\"elephant";
console.log("String:", s);
console.log("Result:", s.replace(rx, "$1'"));

关于javascript - 正则表达式非转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50261853/

相关文章:

java - Java 正则表达式线程安全吗?

javascript - 使用 CSS sprites 来切换状态,而无需为每种情况编写一个类

JavaScript:如果发现值在数组中重复则返回 true 的最佳方法

javascript - 无法定义数据。为什么是这样?

regex - 匹配行中不跟有任何字符的模式

mysql - 每 3 个字符串后用空格替换逗号

javascript - JQuery addMethod() 2 字正则表达式验证

javascript - 全宽但固定高度响应 slider

javascript - 从右到左切换 Div

正则表达式从 XSLT 中删除单词