正規表現の先読みと後読みアサーションの解説
正規表現の先読み (?=)、否定先読み (?!)、後読み (?<=)、否定後読み (?<!) の完全ガイド。ゼロ幅アサーションの例を含みます。
Assertions
詳細な説明
先読みと後読みアサーション
先読み・後読みアサーションは、現在位置の前後のパターンをマッチに含めずにチェックします。文字を消費しない「ゼロ幅」のアサーションです。
4つのタイプ
| 構文 | 名前 | チェック内容 |
|---|---|---|
(?=...) |
肯定先読み | 後続がマッチする |
(?!...) |
否定先読み | 後続がマッチしない |
(?<=...) |
肯定後読み | 先行がマッチする |
(?<!...) |
否定後読み | 先行がマッチしない |
肯定先読み (?=...)
先読み内のパターンが次にマッチできる位置にマッチします。先読み自体は文字を消費しません。
例:\w+(?=@) はメールアドレスのユーザー名部分にマッチします。user@example.com では @ を含めずに user にマッチします。
否定先読み (?!...)
内部のパターンが次にマッチできない位置にマッチします。
例:\d+(?!px) は px が後続しない数値にマッチします。100em 200px 300rem では 100 と 300 にマッチしますが 200 にはマッチしません。
肯定後読み (?<=...)
指定されたパターンが先行する位置にマッチします。
例:(?<=\$)\d+ はドル記号が先行する数字にマッチします。Price: $100 では 100 にマッチします。
否定後読み (?<!...)
指定されたパターンが先行しない位置にマッチします。
例:(?<!\d)px は数字が先行しない px にマッチします。不正に使用されたCSS単位を見つけるのに便利です。
ブラウザサポート
すべてのモダンブラウザが後読みアサーション(ES2018+)をサポートしています。古い環境では先読みのみサポートされる場合があります。対象プラットフォームを必ず確認してください。
ユースケース
通貨記号が先行する場合のみ価格を抽出する、特定の句読点が後続しない単語にマッチする、パスワードの複雑さルールを検証するなど、特定のコンテキストでのみパターンをマッチさせる必要がある場合。