【问题标题】:How to replace inner double quotes to single quote using regex如何使用正则表达式将内部双引号替换为单引号
【发布时间】:2021-11-24 07:22:14
【问题描述】:

我有类似来自 API 的数据,我需要做 JSON.parse 这个,但问题是有内部双引号,所以我无法解析它我应该怎么做,我可以使用正则表达式什么的。

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

我也用过这个正则表达式

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

但是通过使用这个正则表达式,它会将所有双引号替换为像这样的单引号 =>

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

我只想像这样替换引号

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

【问题讨论】:

  • 如果 JSON 这么简单(一个键值对),用 dataString = dataString.replace(/^([^"]*"[^"]*"\s*:\s*")(.*)("[^"]*$)/g, (_, x,y,z) => `${x}${y.replace(/"/g, '\\"')}${z}`) 很容易修复
  • 请API作者解决问题。

标签: javascript regex


【解决方案1】:

问题是,如果单引号用于包装键/值,则它们不是 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)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多