1

私は非常に大きな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\');'

ご覧のとおり、適切なエスケープの有無にかかわらず、値の部分内に引用符が繰り返されている場合、正規表現は機能しません。どうすればそれを改善できるかアイデアはありますか?

4

2 に答える 2

2

/ style="[^"]+"/g属性を見つける標準的な方法は、 [デモ]のようなものです。

マークアップの問題は、それがいたるところにあることです。正規表現はパターンを見つけるのに最適です。このマークアップには予測可能なパターンはありません。

于 2012-09-06T12:12:11.660 に答える
1

すべてを一度に実行するために、なぜ1つの大きな正規表現を記述したいのでしょうか。

DOMツリーへの解析には時間がかかりすぎる可能性がありますが、手作りのパーサーを作成する方がおそらく良いでしょう。

style2つを混在させることもできます。正規表現を使用してすべてのタグを分離し(これは簡単です)、タグ内の属性を解析して、遭遇した属性を分離(および削除)します。

于 2012-09-06T11:57:58.857 に答える