2012-09-06 76 views
1

我有非常大的HTML,如果被解析成DOM樹,將花費更多的時間,所以這個選項儘管是「正確的」 不可。我需要刪除所有內部標籤樣式聲明。如何從JavaScript中使用正則表達式的所有標籤中刪除特定的HTML屬性?

有一個正則表達式,似乎在大多數情況下工作:

> re 
/\sstyle\s*=(\"[^\">]*\"*|\'[^\'>]*\'*|[^\s>]*)/gi 
> test 
[ '<img src="some.jpg" style="width:auto" width="50" height="60">', 
    '<img style=\'width:auto\'>', 
    '<img style=\'width:auto>', 
    '<img style=width:auto>', 
    '<div style=\'\'>', 
    '<div style=\'background-image:url(\'paper.gif\');\'', 
    '<div style=\'background-image:url(\\\'paper.gif\\\');\'' ] 
> test.forEach(function(t){console.log(t.replace(re,''))}) 
<img src="some.jpg" width="50" height="60"> 
<img> 
<img> 
<img> 
<div> 
<divpaper.gif');' 
<divpaper.gif\');' 

值部分內部正如你看到的,萬一有反覆行情,有或沒有適當的轉義,正則表達式沒有按沒有工作。任何想法,我可以改善它?

回答

1

你爲什麼要編寫一個大的正則表達式做所有這一切在一次?

解析成一個DOM樹可能會花費太多時間,但是寫一個手工製作的解析器可能會更好。

您也可以混合使用正則表達式來隔離每個標籤(這很容易),然後解析標籤內的屬性,隔離(並刪除)您遇到的任何style屬性。

+0

其實我結束了你的做法 - 讓所有的標籤,然後分析他們,我想要的方式。 – xyzman

2

找到一個屬性會像/ style="[^"]+"/g [demo]的標準方法。

與您的標記的問題是,它是所有的地方;正則表達式在尋找模式方面很棒。這個標記沒有可預測的模式。

相關問題