Javascript 正则表达式转义引号(但不转义已经转义的引号)

标签 javascript regex

我正在寻找一个 JavaScript 正则表达式,它将转义单引号,但它不应该转义已经转义的单引号。

最佳答案

理想情况下,您希望每场比赛都从上一场比赛结束的地方开始。否则很容易与转义序列不同步。 @outis 的正则表达式很接近,但它无法转义 '\\' 中的第二个单引号。在第一次匹配之后,它必须匹配至少一个非反斜杠和一个单引号,这是它做不到的。如果还有更多字符,它会向前跳过并在第二个单引号之后开始匹配。

试试这个:

result = subject.replace(/([^'\\]*(?:\\.[^'\\]*)*)'/g, "$1\\'");

这是 Friedl 的“展开循环”模式的示例:

普通*(特殊普通*)*

[^'\\]* 是“普通 *”部分;它吞噬了除单引号或反斜杠之外的任意数量的字符。如果下一个字符是反斜杠,\\.(“特殊”)会使用该字符和下一个字符(反斜杠、单引号或其他字符)和 [^'\\]* 再次接管。根据需要重复。

关键是正则表达式从不跳过,也从不回溯。如果它看到一个反斜杠,它总是使用那个和下一个字符,所以它永远不会不同步。

关于Javascript 正则表达式转义引号(但不转义已经转义的引号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8874509/

相关文章:

javascript - <script> 未在 AJAX 中返回

php - 实现 session 以保持用户登录,安全问题

javascript - 更新数组时不会触发模型的更改事件?

c# - 删除除一个标签外的所有 html 标签

浏览器中的 JavaScript 正则表达式替换换行符处理

javascript - 如何从这个 json 数据创建两个数组?

c# - 使用正则表达式删除属性。只是属性值包含特殊字符 "<"

javascript - 使用 Javascript 在网页中查找 LaTex 指令的正则表达式

php - 如何在 php 中用空格替换所有非字母数字字符?

javascript - 查询;检查对象是否有子 $(this)