2013-07-17 45 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

相关问题