Javascript正则表达式无法按预期工作

时间:2015-10-19 16:24:37

标签: javascript json regex

我的字符串是JSON形式但不是有效的JSON字符串。字符串如下所示(它的单行字符串,但为了清楚起见,我添加了新行。)

"{
   clientId :\"abc\",
   note:\"ATTN:Please take care of item x\"
}"

我正在尝试使用javascript正则表达式修复它(重新格式化为有效的JSON)。我目前正在使用以下正则表达式,但它不适用于第二个属性,即注意,因为它的值中包含冒号(:)。

retObject.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2": ');

我在这里尝试做的是使用正则表达式将上面的字符串重新格式化为

"{
   "clientId" :"abc",
   "note":"ATTN:Please take care of item x"
 }"

尝试了许多方法,但由于我在RegEx中仍处于初学状态,因此无法正常使用。

2 个答案:

答案 0 :(得分:0)

尝试将.split()RegExp /[^\w\s\:]/.test()RegExp /\:$/.match()RegExp一起使用/\w+/

var str = "{clientId :\"abc\",note:\"ATTN:Please take care of item x\"}";
var res = {};
var arr = str.split(/[^\w\s\:]/).filter(Boolean);
for (var i = 0; i < arr.length; i++) {
  if ( /\:$/.test(arr[i]) ) {
    res[ arr[i].match(/\w+/) ] = arr[i + 1]
  }
}

console.log(res)

答案 1 :(得分:0)

尝试使用正则表达式修复损坏的JSON是一个愚蠢的差事。就在您认为正在使用正则表达式时,您将会看到更多的gobbledygook,例如

"{ clientId :\"abc\", note:\"ATTN:Please take \"care\" of item x\" }"

其中一个字符串里面有双引号,现在你的正则表达式会失败。

为了您自己和整个团队的理智,无论是现在还是未来,都要修复产生这个破坏的JSON的上游组件。世界上所有语言都拥有完全称职的JSON序列化程序,可以创建符合要求的JSON。告诉上游人员使用它们。

如果你绝对没有选择,请使用受到谴责的评价。与邪恶相遇:

eval('(' + json.replace(/\\"/g, '"') + ')')