2015-02-06 53 views
0

我尝试替换代码片段中的一些HTML标记。例如。 span-element是在没有id的情况下进行替换,但是当它有一个id时不会进行替换。正则表达式在html标记中的捕获词

这里是我的方法:

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-element有一个id,所以它应该保持原样,如下所示:Text abc <span id=MyId > text def

var sHTML = 'Text abc <span style="color:#00ff00;" > text def '; 它来代替,因为跨度元素没有ID如下:Text abc text def

有什么想法?提前致谢。

回答

1
<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); 
+0

是的,它是!谢谢。 – user3815508 2015-02-06 11:02:26