2015-10-19 55 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, '"') + ')') 
相關問題