我尝试替换代码段中的一些HTML标签。例如。一个span元素将在没有id时替换,但是在没有id时不替换。

这是我的方法:

var sHTML = 'Text abc <span> text def ';
sHTML = sHTML.replace(/<\s*\/*\s*span(.[^(id\=)]*){0,1}?>/ig, '');
alert(sHTML);


它做错了!因为在出现“ id =”时不能替换它,但是在出现诸如“ i”或“ d”或“ =”之类的单个字符的情况下,它不应有任何区别,而必须替换。
换句话说,我期望:
var sHTML = 'Text abc <span id=MyId > text def ';没什么可替换的,因为span元素具有一个id,因此应按如下所示保留它:Text abc <span id=MyId > text def

但是对于var sHTML = 'Text abc <span style="color:#00ff00;" > text def ';
它必须替换,因为span元素没有如下的id:Text abc text def

任何的想法?提前致谢。

最佳答案

<span (?![^>]*id)[^>]*>[ ]*|<\/span>


试试看。看演示。

https://regex101.com/r/vD5iH9/82

var re = /<span (?![^>]*id)[^>]*>[ ]*|<\/span>/gim;
var str = 'Text abc <span style="color:#00ff00;" > text def \'; \nText abc <span id=MyId > text def \nText <span color="red" >abc</span>';
var subst = '';

var result = str.replace(re, subst);

10-05 20:37
查看更多