JS RegExp替换<和>内部元素属性

时间:2014-01-27 16:45:59

标签: javascript html regex string

我希望将&lt;&gt;替换为html元素属性中的<>,或者换句话说="和{之间的" {1}}。

我自己尝试了这个,但我只是没有匹配任何东西。正则表达式的细分也很好,所以我可以尝试理解它并最终自己编写。

3 个答案:

答案 0 :(得分:2)

您可以使用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;的每个属性,然后对匹配的字符串部分执行替换。

答案 1 :(得分:0)

如果您在浏览器中执行此操作,请尝试以下操作:

function removeDoubleEncoding( element ){
    Array.prototype.forEach.call( element.attributes, function replaceString( attribute ){
        attribute.value = attribute.value.replace( '&lt;', '<' ).replace( '&gt;', '>' );
    } );
}

因此:

<body class="&lt;erg&gt;">

...您可以按照以下方式应用此功能......

removeDoubleEncoding( document.body );

...最后:

<body class="<erg>">

答案 2 :(得分:0)

string.replace(/="[^"]+"/g,function($0){return $0.replace(/&lt;/g,"<").replace(/&gt;/g,">");})

这一行做了什么:

  • 在字符串中,搜索以="开头并以"
  • 结尾的文字
  • 在此文中:将所有&lt;替换为<
  • 在此文中:将所有&gt;替换为>

在函数中,$0表示匹配的字符串="[^"]+"

Visit this page了解有关字符串替换的更多详细信息。