正则表达式在双引号内转义双引号
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);
);
【讨论】:
我将此标记为已接受。我已经解决了我的问题,但也许其他人会发现这个解决方案很有帮助。谢谢!以上是关于正则表达式在双引号内转义双引号的主要内容,如果未能解决你的问题,请参考以下文章