【问题标题】:Javascript regular expression to find double quotes between certain charactersJavascript正则表达式查找某些字符之间的双引号
【发布时间】:2013-07-17 18:47:01
【问题描述】:

我正在尝试创建一个可以解析为 JSON 的字符串。该字符串是根据 CMS 中的内容动态创建的。 该内容可能包含带有双引号的 HTML 标记,这会使 JSON 解析器感到困惑。所以,我需要用" 替换HTML 中的双引号,而不需要替换实际上是JSON 结构一部分的双引号。 我的想法是将 HTML 包装在标记中,我可以使用它来将这些标记之间的所有内容标识为要替换的引号。 例如,我想解析成 JSON 的字符串可能看起来像这样......

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

所以,我想用&amp;quot; 替换 XXX 和 YYY 之间的每个双引号。 有点像...

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

希望这是有道理的。感谢您的任何建议。

【问题讨论】:

  • 我会假设回到 CMS 并让它/他们正确地编写 JSON 不是一个有效的选项?顺便说一句,非常粗略 (?:\w+=(")|"(?:\s|&gt;)) 不过,老实说,这不是正则表达式的工作。而且,恕我直言,如果合同承诺提供 JSON,它应该。这就像试图用太多的逗号修复坏的 CSV...
  • 感谢布拉德的快速回复。你是对的,这不是正则表达式的工作。这只是试图破解我无法修复的东西。您的答案非常适合去除围绕 html 属性的引号,但我不能真正假设 innerHTML 中也不会有引号。
  • 你不能得到一个更好的 JSON 解析器吗?这真的不应该是一个问题。

标签: javascript regex


【解决方案1】:

鉴于 Stack Overflow 的“我们不做你的作业”的原则,我不认为我会完成整个解决方案,但我可以在半成品代码中给你一些指导。

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.

我有点发现,对于某些模式来说,正则表达式非常好,让编程语言完成一些工作通常是最好的解决方案。

【讨论】:

  • 这很有意义。拉出所有的 html,单独调整每个 html 字符串,然后将其放回原始字符串中。我将实施此解决方案。谢谢。
猜你喜欢
  • 2017-06-18
  • 2019-04-15
  • 1970-01-01
  • 2023-03-17
  • 2015-01-22
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多