我尝试替换代码段中的一些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);