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

3

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

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

例如:

{
    "id_clients":"58844",

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

我需要一个正则表达式,可以将在开头和结尾的双引号之间的任何双引号替换为 \ "

谢谢。


2
你需要修复生成JSON的任何问题。 - Explosion Pills
你如何知道哪里是**开头和结尾的"**? - anubhava
第一个和最后一个冒号前/后的内容。 - Yurii Dolhikh
我同意@ExplosionPills的观点,如果可以的话,你需要使用已经知道如何构建JSON的代码...那些引号应该在获取JSON字符串之前进行转义...否则,你将需要一些复杂的前瞻/后顾表达式,这可能会变得非常棘手。我比大多数人都更擅长正则表达式(并不是专家),但我也不想去解决这个问题。 - Kevin Nelson
如果你的JSON数据是这样的:"id_clients":""588","44"",它如何知道在588后面忽略引号,因为它看起来像JSON。 - Kevin Nelson
好的,那就修理发电机吧。谢谢。 - Yurii Dolhikh
2个回答

5

虽然修理发电机肯定更好,但我只是为了好玩试了一下。这个方法可能适用于你的情况,或者至少能给你一些启示:

你可以在这里尝试它。

$( 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);
}
);

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

-1

你可以试一试,但这只适用于开头标签:

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

是的,我已经有类似的东西了。即:replace(/""([0-9A-Za-z _-]+)"/g, '"\"$1\"')。问题在于字符串中间的引号。 - Yurii Dolhikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接