2015-10-19 56 views
0

我有JSON形式的字符串,但不是有效的JSON字符串。字符串就像下面(它的单行字符串,但我已经添加了清晰的新行。)Javascript正则表达式不按预期方式工作

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

我试图使用javascript正则表达式来修复它(reformating到有效的JSON)。我目前使用下面的正则表达式,但它不适用于第二个属性,即注意,因为它的值为冒号(:)。

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

我想在这里做的是使用正则表达式来重新格式化上面的字符串到

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

试了很多办法,但不可能得到公正的权利,因为我在正则表达式仍然beginer。

+1

这可能是无效的,因为“字符串”有多行,在JavaScript中不能像_that_那样工作。 – Xufox

+0

关于使用RegEx的SO有很多类似的问题。请看它们 –

+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

我非常困惑,像[[\ w + \ s + | \:]'这样的字符集是否与其中的'+'和'|'一起被赋值。你写的意思是“匹配除字母,加号,字母数字,垂直条或冒号以外的任何字符”。那是你要的吗? – 2015-10-19 18:07:38

+0

@torazaburo _“那是你想要的?”_不;试图匹配'{','}',',';查看更新的帖子。但是,如果字符串中的这些字符需要进一步调整。感谢字符集规则提醒 – guest271314

0

试图修复破碎的JSON用正则表达式是一个傻瓜的差事。当你认为你有正则表达式的工作,你将与更多的官样文章呈现如

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

其中的一个字符串有它内部的双引号,现在你的正则表达式将失败。

为了您自己的理智,以及您现在和将来的整个团队的理智,都有上游组件正在生成这个已破解的JSON。世界上所有的语言都有完美的JSON序列化器,它们将创建一致的JSON。告诉上游人员使用它们。

如果您绝对没有选择,请使用大量评价的eval。满足邪恶与邪恶:

eval('(' + json.replace(/\\"/g, '"') + ')') 
相关问题