Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

6年前关闭。



Improve this question




我正在寻找在html元素属性内用&lt;&gt;替换<>,或者换句话说,在=""之间替换。

我自己尝试过,但是我什么都没有。 regexp的细目分类也不错,因此我可以尝试理解它,并最终自己编写。

最佳答案

您可以使用while循环来执行此操作,该循环检查是否仍有要替换的标签:

var htmlString = '<div id="&lt;lol&gt;"><span title="&lt;&gt;&lt; &lt;&gt;&lt; &lt;&gt;&lt; fish">hover for fishies</span></div>';
while (htmlString.match(/="([^"]*)\&[gl]t;([^"]*)"/g)) {
    htmlString = htmlString.replace(/="([^"]*)\&gt;([^"]*)"/g, '="$1>$2"')
        .replace(/="([^"]*)\&lt;([^"]*)"/g, '="$1<$2"');
}

该循环将继续进行,直到HTML字符串中没有&gt;&lt;匹配项为止。

之所以无法在单个正则表达式替换中完成此操作(或至少就我所知),是因为您需要在&lt;&gt;之间匹配每个=""。使用正则表达式,这意味着您必须执行类似/="([^"]*)(\&[lg]t;([^"]*))*"/g的操作来匹配所有这些,但这将意味着您无法再检索捕获组,这将使它无法替换。

但是,您也可以在替换项上使用回调函数来执行此操作:
var htmlString = '<div id="&lt;lol&gt;"><span title="&lt;&gt;&lt; &lt;&gt;&lt; &lt;&gt;&lt; fish">hover for fishies</span></div>';
htmlString = htmlString.replace(/="[^"]*\&[gl]t;[^"]*"/g, function(match) {
   return match.replace(/\&gt;/g, '>').replace(/\&lt;/g, '<');
});

这将首先匹配其中包含&lt;&gt;的每个属性,然后对字符串的匹配部分执行替换。

09-25 16:59
查看更多