1

私は多くの同様の質問を見ましたが、それでも答えは見つかりませんでした。
HTMLのすべての空白(改行を含む)を置き換える必要がある正規表現をどのように表示する必要がありますが、タグは無視しますか?

現在私は使用Regex.Replace(content, @"\s+", "");していますが、ページに存在するJavaScriptのスペースを削除し、ページが機能しません。

ありがとうございました。

編集:回答のいくつかの質問の後、ここでもう少し詳細があります:私がしているのは、私たちのサイトのHTML出力を「最小化」するHTTPモジュールです。さまざまなソースからの非常に動的なコンテンツを含むWebサイトがあります。最終的な目標は、ページサイズを縮小し、ネットワークトラフィックを削減することです。これは非常に負荷の高いWebサイトであるため、それを完了することが重要です。

実際には、JSとCSSの縮小にMbCompressionライブラリを使用していますが、HTML出力の縮小はサポートされていません(少なくとも私は見つかりませんでした)。

4

6 に答える 6

1

あなたの目標は何ですか?ブラウザーはページをレンダリングするときに多くの空白を無視するので、ソース コードをクリーンアップしたいと思うでしょう。その場合は、使用しているプログラムがこれに対する解決策を提供しているかどうかを確認してください。たとえば、Dreamweaver にはソース コードを再フォーマットするツールがあります。

Tidyは 1 つのオプションかもしれませんが、単純なコード フォーマット ツール以上のもののようです。

于 2012-10-15T13:47:28.500 に答える
1

適切な HTML パーサーを見つけることができれば、私は DOM 操作でそれを行います。できない場合は、次のようなもの

Regex.Replace(content, "(?i)(<script(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</script\\s*>|<style(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</style\\s*>|<textarea(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</textarea\\s*>|</?[a-z](?:[^>\"']|\"[^\"]*\"]|'[^']*')*>|\\S+)|\\s+", "$1");

するべきです。タグ内、埋め込み JS、CSS、またはテキストエリア内のスペースは削除されませんが、テキスト ノードの改行は削除されます。

于 2012-10-15T13:48:22.737 に答える
1

これを行うために単一の (妥当な) 正規表現を書く方法は実際にはありません。特に、javascript と css をサポートしたい場合はそうではありません。本物のパーサーが必要です。

于 2012-10-15T13:38:46.233 に答える
0

確かに、空白を完全に削除するだけでなく、少なくともスペースに置き換える必要があります。HTMLの場合は問題ありませんが、複数のスペースが折りたたまれていないJavaScriptの文字列を使用する場合は、スクリプト内、文字列内など、正規表現が簡単に機能しないため、別の方法を検討する必要があります。 。

そうは言っても、これを行う正当な理由はわかりません。ファイルのサイズが心配な場合は、サーバーに圧縮を使用するように指示してください。これは、すべてのブラウザーが十分にサポートしていると思われます。ページは基本的にサーバーによって圧縮され、クライアントで解凍されます。サーバーにとってはもう少し作業が多いので、帯域幅とCPUのどちらを重視するかによって異なります。

于 2012-10-15T13:41:22.690 に答える
0
Regex.Replace(html, "\s*(<[^>]+>)\s*", "$1", RegexOptions.SingleLine);

タグ、閉じられていないタグなどに関連するリスクがあります。「さまざまなソースからの動的コンテンツ」をある程度制御できることを願っています。また、他のすべてを試してみて、これが最後の手段になることを願っています。

于 2012-10-15T16:40:54.793 に答える
0
Regex.Replace(document.body.innerHTML, @"\s+", "");

document.body.innerHTML代わりに使用するとうまくいく場合があります。私はわかりません。

于 2012-10-15T13:40:15.147 に答える