2015-02-06 54 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