簡體   English   中英

如何使用javascript中的正則表達式從所有標簽中刪除特定的HTML屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM