我正在尝试对JSON
字符串进行替换。像这样:
'{"val1":"1","val2":"2"","val3":"","val4":""}'
查看与关键"val2"
相关联的值,我得到两个双引号" 2 " "
,但我无法解决这个问题,因为这就是我得到JSON
的方式,我我试图用1个双引号替换这些事件:从"2""
到"2"
我正在做replace()
,但我找不到合适的正则表达式。我试过这个:
replace(/""/g, '"')
如果我这样做,它也会替换"val3"
和"val4"
。
这个不起作用:
replace(/[^:]+"";/g, '"')
我正在努力完成replace(REGEX_HERE)
:
从"SomeCharactersHere""
到"SomeCharactersHere"
答案 0 :(得分:1)
你试过了吗?
var s = '{"val1":"1","val2":"2"","val3":"","val4":""}';
s = s.replace(/([^:])\"\"/g, '$1\"')
console.log(s);
这匹配一些非冒号字符,后跟一组双引号,并将其替换为最初找到的非冒号字符以及单双引号。
根据ctwheels的建议:
var s = '{"val1":"1","val2":"2"","val3":"","val4":""}';
s = s.replace(/([^:]")"+/g, '$1')
console.log(s);
如上所述,它将捕获多个无关双引号的可能性,并将替换简化为$1
。谢谢!
答案 1 :(得分:0)
我会在匹配部分添加逗号。
'{"val1":"1","val2":"2"","val3":"","val4":""}'.replace(/"",/g, '\",');
我还想弄清楚为什么我的格式很糟糕的json: - )
更好的是:
'{"val1":"1","val2":"2"","val3":"","val4":""}'.replace(/"\([^"]+\)""/g, '"\1"')
答案 2 :(得分:0)
这样的事情应该有效。
const str = '{"val1":"1","val2":"2"","val3":"","val4":""}';
const cleaned = str.replace(/(\"+([^",]*)\"+)/g, (match,quotes,val) => `"${val}"`);
console.log(cleaned);
console.log(JSON.parse(cleaned));

基本上,它会匹配每个引号块(包括额外的引号),然后将其重写为只有一对引号。
请注意:如果您的值包含逗号,则无法正常工作。这是对这种特殊方法的限制。如果您需要值中的逗号,则可以使用此备用正则表达式:
/(\"([^"]*)\"+)/g
那个将用于逗号,但如果你在字符串的开头有一个双引号就不会工作。在这种情况下,您必须将+
转移到第一个。