2

一部の html からすべてのスタイル属性を削除しています。正規表現を使用できます

/style=("[^"]"|'[^']')/

しかし、これは非効率ではないでしょうか (負の一致のため)。また、引用符を含む可能性のあるスタイル属性 (背景画像など) に対して脆弱であることもわかっています。

有効なスタイル文字列に一致させるために使用できる正規表現はありますか?それとも、正規表現を使用して html を解析するのと同様に、これは一般的に正規表現で実行するには難しすぎますか?

*編集これは(私が思うに)私がスクレイピングしているhtmlで最もトリッキーなスタイル文字列です

style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'"
4

4 に答える 4

1

否定的な一致がすべての場合に遅いとは思いません。結局のところ、style=次のバイトで開始点を指定すると、とにかくパターンと比較されます。

ただし、属性が引用符で囲まれていない場合に対応する必要があります。

/style=(".*?"|'.*?'|[^"'][^\s]*)/s

HTML 属性構文のすべての生成に一致する必要があります。ただし、ドットが正規表現エンジンの改行 (したがって ) を含むすべての文字と一致することを確認してください。/sまた、貪欲でない量指定子も使用し*?ました。これらは実装されていない可能性もあります。

style=次の値がないという特殊なケースがありますが、簡単にするために上では表されていません。

于 2012-04-17T11:19:15.433 に答える
0

HTMLを文字列として処理するべきではありません。JSで必要なのはですelt.style='';。XSLTを介して自分のものを実行する機会があれば、それはワンライナーです。

于 2012-12-01T02:53:27.667 に答える
0

試す/ style\=[\"\']?([a-zA-Z0-9 \:\-\#\(\)\.\_\/\;\'\,]+)\;?[\"\']? /ig

それは私が知っているすべてのスタイル属性を見つけることになっています。

http://jsfiddle.net/DULyx/3/-ここをチェック

于 2012-04-17T10:39:45.150 に答える