HTMLタグのマッチングと抽出の正規表現
HTMLタグのマッチング、タグ名と属性の抽出、HTMLの除去のための正規表現パターン。正規表現でHTMLを解析することに関する重要な注意事項を含みます。
Common Patterns
詳細な説明
正規表現によるHTMLタグマッチング
正規表現は完全なHTMLパーサーとして使用すべきではありませんが、シンプルなタグのマッチング、抽出、サニタイズタスクには便利です。
任意のHTMLタグにマッチ
<[^>]+>
これは任意のHTMLタグ(開始、終了、自己閉じ)にマッチします:
<div>、</div>、<br />、<img src="..." />
特定のタグにマッチ
<(?:p|div|span)[^>]*>
特定の要素の開始タグにマッチします。非キャプチャグループ内で選択を使用します。
タグ名と属性の抽出
<(?<tag>\w+)(?<attrs>[^>]*)>
グループ:
tag:要素名attrs:すべての属性(生の文字列)
個別の属性の抽出
(?<attr>\w+)=(?:"(?<val>[^"]*)"|'(?<val2>[^']*)')
ダブルクォートとシングルクォートの両方の属性値に対応します。
すべてのHTMLタグを除去
str.replace(/<[^>]+>/g, "")
すべてのHTMLタグを除去し、テキストコンテンツのみを残します。注意:属性値内の < など、すべてのエッジケースには対応しません。
自己閉じタグにマッチ
<\w+[^>]*/>
<br />、<img src="..." />、<input type="text" /> のようなタグにマッチします。
なぜ正規表現でHTMLを解析すべきでないか
- HTMLは正規言語ではなく、再帰的なネストがあります
- 正規表現はネストされたタグを正しく処理できません
- 不正なHTMLは正規表現パターンを壊します
- 信頼性の高いHTML処理にはDOMパーサー(DOMParser、cheerio、jsdom)を使用してください
既知の形式のHTMLの単純な抽出やサニタイズには正規表現で問題ありません。複雑な解析には常に適切なパーサーを使用してください。
ユースケース
プレーンテキストプレビューのためにユーザー入力からHTMLタグを除去する必要がある場合、既知のHTML構造から特定の要素を抽出する場合、または不要なタグを除去しながらコンテンツを保持してHTMLをサニタイズする場合。