正则表达式在双引号内转义双引号

Posted

技术标签:

【中文标题】正则表达式在双引号内转义双引号【英文标题】:Regular expression to escape double quotes within double quotes 【发布时间】:2013-05-10 04:47:44 【问题描述】:

我有一个字符串需要解析为 JSON。

问题是,它有时可能包含双引号,导致解析错误。

例如:


    "id_clients":"58844",

    "id_clients_name" : ""100" test"qw"

我需要一个正则表达式来用\" 替换开头和结尾" 之间的任何双引号。

谢谢。

【问题讨论】:

您需要解决生成 JSON 的任何问题。 你怎么知道在哪里开闭" ':' 之前/之后的第一个和最后一个。 我同意@ExplosionPills,如果可以的话,你需要使用已经知道如何构建 JSON 的代码......在你得到 JSON 字符串之前,这些引号应该被转义......否则,你'需要一些复杂的前瞻/后视表达式,这些表达式可能会令人讨厌。我比大多数使用正则表达式的人(无论如何都不是专家)要好,我不想弄清楚这一点。 例如如果你的 JSON 是:“id_clients”:“588”,“44””,它怎么知道忽略 588 之后的“,因为它看起来像 JSON。 【参考方案1】:

你可以试试,虽然这只对开始标签有效:

.replace(/\"\"/g, '\\""');

【讨论】:

是的,我已经有类似的东西了。即:替换(/\"\"([0-9A-Za-z _-]+)\"/g, '\"\\"\$1\\"')。问题在于字符串中间的引号。【参考方案2】:

我只是为了好玩而尝试它,尽管修复生成器肯定更好。这可能适用于您的情况,或者至少会启发您:

你可以试试here

$( function() 

  var myString = " \"na\"\"me\": \"va\"lue\", \"tes\"\"t\":\"ok\" ";
  var myRegexp = /\s*\"([\w\"]+)\"\s*[,:]/g;
  var match;
  var matches = [];

  // Save all the matches
  while((match = myRegexp.exec(myString)) !== null)
  
      matches.push(match[1]);
      console.log(match[1]);
  

  // Process them
  var newString = myString;
  for (var i=0; i<matches.length; i++)
  
      var newVal = matches[i].replace(/\"/g, '\\\"'); 
      newString = newString.replace(matches[i], newVal);
  
  alert(myString + "\n" + newString);

);

【讨论】:

我将此标记为已接受。我已经解决了我的问题,但也许其他人会发现这个解决方案很有帮助。谢谢!

以上是关于正则表达式在双引号内转义双引号的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在单引号内转义双引号

无法使用正则表达式在双引号之间提取字符串

使用正则表达式转义单引号字符串中的所有双引号 [重复]

正则表达式删去双引号vscode

在coffeescript正则表达式中应该如何转义双引号?

python 单个正则表达式,用于解析Python单引号或双引号字符串,同时保留任何转义的引号字符