2013-07-17 79 views
0

我想創建一個可以解析成JSON的字符串。該字符串是根據CMS中的內容動態創建的。 該內容可能包含帶雙引號的HTML標記,這會混淆JSON解析器。所以,我需要用"替換HTML中的雙引號,而不用替換實際上是JSON結構一部分的雙引號。 我的想法是將HTML內部的標記包裹起來,我可以使用它來標識這些標記之間的所有內容,作爲我想要替換的引號。 比如我想解析字符串轉換成JSON看起來是這樣的......JavaScript的正則表達式來查找某些字符之間的雙引號

str = '{"key1":"XXX<div id="divId"></div>YYY", "key2":"XXX<div id="divId"></div>YYY"}'; 

所以,我想更換XXX和一個&quot;一個YYY之間的每雙引號。 類似...

str = str.replace(/XXX(")YYY/g, '&quot;'); 

希望有道理。感謝您的任何建議。

+4

我打算假設回到CMS並讓它/他們寫JSON _correctly_不是一個有效的選項嗎?順便說一句,**非常粗糙**(?:\ w + =(「)|」(?:\ s |>))'儘管如此,這不是正則表達式的工作。而且,恕我直言,如果合同承諾提供JSON,它應該。這就像試圖用太多的逗號來修復錯誤的CSV ... –

+0

感謝Brad的快速響應。你是對的,這不是正則表達式的工作。這只是一個嘗試破解我無法修復的東西。你的答案完美適用於清除html屬性的引用,但我不能認爲innerHTML中也不會有引號。 – graeme

+0

難道你不能只是得到一個更好的JSON解析器嗎?這真的不應該是一個問題。 – Malvolio

回答

0

鑑於堆棧溢出的「我們不做你的功課」的原則,我不認爲我會通過整個解決方案,但我可以給你一些半成品代碼的指針。

var xySearch = /this regex should find any text between XXX...YYY/g; 
// note the g at the end! That's important 
var result; 
var doubleQuoteIndices = []; 
// note the single-equals. I avoid them when possible inside a "condition" statement, 
// but here it sort of makes sense. 
while (result = xySearch.exec(str)) { 
    var block = result[0]; 
    // inside of the block, find the index in str of each double-quote, and add it 
    // to doubleQuoteIndices. You will likely need result.lastIndex for the absolute position. 

} 

// loop backwards through str (so that left-side replacements don't change right-side indexes) 
// to replace the characters at each doubleQuoteIndices with the appropriate HTML. 

我發現像正則表達式一樣偉大的某些模式,使用編程語言做一些工作往往是最好的解決方案。

+0

這很有道理。拉出所有html,分別調整每個html字符串,然後將其放回原始字符串中。我會實施這個解決方案。謝謝。 – graeme

相關問題