我希望将<
和>
替换为html元素属性中的<
和>
,或者换句话说="
和{之间的"
{1}}。
我自己尝试了这个,但我只是没有匹配任何东西。正则表达式的细分也很好,所以我可以尝试理解它并最终自己编写。
答案 0 :(得分:2)
您可以使用while
循环来检查是否还有要替换的标记:
var htmlString = '<div id="<lol>"><span title="<>< <>< <>< fish">hover for fishies</span></div>';
while (htmlString.match(/="([^"]*)\&[gl]t;([^"]*)"/g)) {
htmlString = htmlString.replace(/="([^"]*)\>([^"]*)"/g, '="$1>$2"')
.replace(/="([^"]*)\<([^"]*)"/g, '="$1<$2"');
}
此循环将继续运行,直到HTML字符串中没有>
或<
匹配。
在单个正则表达式替换中(或者至少据我所知),这是因为您需要匹配每个<
或>
="
和"
。使用正则表达式,这意味着您必须执行/="([^"]*)(\&[lg]t;([^"]*))*"/g
之类的操作来匹配所有这些内容,但这意味着您无法再检索捕获组,然后将其替换为不可能的事。
您也可以使用替换上的回调函数执行此操作:
var htmlString = '<div id="<lol>"><span title="<>< <>< <>< fish">hover for fishies</span></div>';
htmlString = htmlString.replace(/="[^"]*\&[gl]t;[^"]*"/g, function(match) {
return match.replace(/\>/g, '>').replace(/\</g, '<');
});
首先匹配其中包含<
或>
的每个属性,然后对匹配的字符串部分执行替换。
答案 1 :(得分:0)
如果您在浏览器中执行此操作,请尝试以下操作:
function removeDoubleEncoding( element ){
Array.prototype.forEach.call( element.attributes, function replaceString( attribute ){
attribute.value = attribute.value.replace( '<', '<' ).replace( '>', '>' );
} );
}
因此:
<body class="<erg>">
...您可以按照以下方式应用此功能......
removeDoubleEncoding( document.body );
...最后:
<body class="<erg>">
答案 2 :(得分:0)
string.replace(/="[^"]+"/g,function($0){return $0.replace(/</g,"<").replace(/>/g,">");})
这一行做了什么:
="
开头并以"
<
替换为<
>
替换为>
在函数中,$0
表示匹配的字符串="[^"]+"
。
Visit this page了解有关字符串替换的更多详细信息。