0

HTML 文字列 (つまり、<p> </p>and <p>&nbsp;</p>) から空の段落を削除することになっている JavaScript に RegEx があります。FF、Chrome、IE8 では正常に動作しますが、IE9 では失敗します。IE9 では、最初の段落は常に削除されます。

var parsedData = '<p>this first paragraph is deleted in IE9</p>';
parsedData += '<p>can contain any number of paragraphs</p><p>&nbsp;</p>';
parsedData += '<p>&nbsp;</p><p>also contains some empty paragraphs</p><p></p>';

parsedData.replace(/(<p\s+.*>&nbsp;<\/p>|<p\s+.*>\s*<\/p>)*/gm, "");
4

4 に答える 4

2

正規表現を使用して HTML を解析することはできませんが (HTML タグは入れ子にすることができるため)、正規表現を使用して、実行したい置換の種類など、限定された文字列置換を行うことができます。

この例では、正規表現は貪欲すぎます:<p\s*.*>とりわけ、<p>hello</p>に一致します。これは、.*セレクターが過度に一般的であり、 を飲み込んでしまうため>hello</pです。で置き換えてみて.*[^>]*一致が始まるタグの外側に式が一致しないようにしてください。

于 2013-08-20T13:53:34.440 に答える
1

あなたの正規表現が機能しているかどうかはわかりません。私が試したとき、firebugの何かを置き換えることができませんでした。ここに可能な解決策があります

parsedData.replace(/<p>(&nbsp;|\s*)<\/p>/gm, '')
于 2013-08-20T13:56:26.893 に答える
0

明確にするために、私はこの質問に自分で答えます。以下のshyamとImjohns3の回答の組み合わせがうまくいきました:

parsedData.replace(/<p\s+[^>]*>(&nbsp;|\s)*<\/p>/gm, "");
于 2013-08-21T09:06:10.633 に答える