【问题标题】:Escape double quotes within double quotes with Regex[JS]使用 Regex[JS] 在双引号内转义双引号
【发布时间】:2015-09-06 21:15:37
【问题描述】:

我有一个 JSON 字符串:'{"place": {"address": "Main Street, \"The House\""}}'

在用 JSON.parse() 解析它之前,我必须确保双引号中的双引号被正确转义。

我试图想出匹配“The House”的正则表达式,但没有成功。

知道如何达到预期的效果吗?

【问题讨论】:

  • 你想要一个正则表达式来匹配引号吗?或者你想看看一个 JSON 字符串是否被正确转义
  • 这不是 JSON 字符串(因为引号 没有 正确转义)。您不能更改创建字符串的代码以首先正确转义吗?
  • @vihan1086 我只想匹配双引号内的双引号。
  • 您编辑的字符串现在是有效的 JSON 除非它是 JS 代码中的字符串文字,在这种情况下,您也需要转义反斜杠,以便生成的字符串是有效的 JSON。但我不明白为什么你需要在解析之前测试任何东西。同样,您不能确保在创建它时正确转义它吗?字符串从何而来?
  • 是的,所以,再次让创建字符串的代码首先正确地进行转义。字符串从何而来?或者捕获解析异常并采取适当的措施。

标签: javascript regex json escaping


【解决方案1】:

这将在积极的前瞻断言的帮助下成为可能。

var s = '{"place": {"address": "Main Street, "The House""}}';
alert(s.replace(/"((?:"[^"]*"|[^"])*?)"(?=[:}])/g, function(m,group)
                          {
                            return '"' + group.replace(/"/g, '\\"') + '"'
                          }))

var s = '{"place": {"address": "Main Street, "The House"", "country": "United Kingdom"}}';
alert(s.replace(/"((?:"[^"]*"|[^"])*?)"(?=[:},])(?=(?:"[^"]*"|[^"])*$)/gm, function(m,group)
                          {
                            return '"' + group.replace(/"/g, '\\"') + '"'
                          }))

【讨论】:

  • 像魅力一样工作!非常感谢!
  • 我应该如何修改它,才能正常使用如下内容:'{"place": {"address": "Main Street, "The House"", "country": "United Kingdom “}}”?
  • 你可以使用这个正则表达式"((?:"[^"]*"|[^"])*?)"(?=[:},])(?=(?:"[^"]*"|[^"])*$), regex101.com/r/zN9sQ2/6
  • 谢谢!你为我节省了很多时间!
  • 如果数据中只有 1 个双引号,它就不起作用。 {"data": "12" 是一英尺的长度"}
猜你喜欢
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 2020-11-26
  • 1970-01-01
相关资源
最近更新 更多