[英]How to remove specific HTML attribute from all tags using regular expressions in javascript?
我有非常大的HTML,如果被解析為DOM樹,將花費很多時間,所以這個選項盡管是“正確的” 是不可用的 。 我需要刪除所有內部標記樣式聲明。
在大多數情況下,有一個似乎有效的正則表達式:
> 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\');'
如您所見,如果值部分內部有重復引號,無論是否有正確的轉義,正則表達式都不起作用。 我有什么想法可以改進嗎?
查找屬性的標准方法類似於/ style="[^"]+"/g
[demo] 。
你的標記的問題在於它到處都是; 正則表達式在查找模式時非常棒。 此標記沒有可預測的模式。
你為什么要寫一個大的正則表達式來一次完成所有這些?
將其解析為DOM樹可能需要花費太多時間,但編寫一個手工制作的解析器可能會更好。
您還可以混合使用兩者:使用正則表達式隔離每個標記(這很容易),然后解析標記內的屬性,隔離(並刪除)您遇到的任何style
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.