如何使用regex将内部双引号替换为单引号



我从API得到了类似的数据,我需要做JSON.解析,但问题是有内部双引号,所以我无法解析它。我应该怎么做,我可以使用regex或其他什么吗。

const dataString = '{"EN" : "2. This English "Blha Blha"  "Woo Woo" something wrong."}';

我还使用了这个正则表达式

replace(/(^"|"$)|"/g, "'");

但通过使用此regex,它将所有双引号替换为单引号,如下所示=>

{'EN' : '2. This English 'Blha Blha'  'Woo Woo' something wrong.'};

我只想替换像这样的报价

{'EN' : '2. This English "Blha Blha"  "Woo Woo" something wrong.'};

问题是,如果单引号用于包装键/值,那么它们就不是JSON的有效符号。为了清楚起见,您需要转义值中的双引号符号。一个更好的方法是用这个修正来更新你的API。更丑陋但工作方式如下:

const dataString = '{"EN" : "2. This English "Blha Blha"  "Woo Woo" something wrong."}';
const normalize = (dataString) => {
let newString = dataString;
newString = newString.replaceAll(`"`, `\"`);
newString = newString.replaceAll(`{\"`, `{"`);
newString = newString.replaceAll(`\"}`, `"}`);
newString = newString.replaceAll(`\" : \"`, `" : "`);
return newString;
};
console.log(JSON.parse(normalize(dataString)));

最新更新