正規表現の先読みと後読みアサーションの解説

正規表現の先読み (?=)、否定先読み (?!)、後読み (?<=)、否定後読み (?<!) の完全ガイド。ゼロ幅アサーションの例を含みます。

Assertions

詳細な説明

先読みと後読みアサーション

先読み・後読みアサーションは、現在位置の前後のパターンをマッチに含めずにチェックします。文字を消費しない「ゼロ幅」のアサーションです。

4つのタイプ

構文 名前 チェック内容
(?=...) 肯定先読み 後続がマッチする
(?!...) 否定先読み 後続がマッチしない
(?<=...) 肯定後読み 先行がマッチする
(?<!...) 否定後読み 先行がマッチしない

肯定先読み (?=...)

先読み内のパターンが次にマッチできる位置にマッチします。先読み自体は文字を消費しません。

例:\w+(?=@) はメールアドレスのユーザー名部分にマッチします。user@example.com では @ を含めずに user にマッチします。

否定先読み (?!...)

内部のパターンが次にマッチできない位置にマッチします。

例:\d+(?!px)px が後続しない数値にマッチします。100em 200px 300rem では 100300 にマッチしますが 200 にはマッチしません。

肯定後読み (?<=...)

指定されたパターンが先行する位置にマッチします。

例:(?<=\$)\d+ はドル記号が先行する数字にマッチします。Price: $100 では 100 にマッチします。

否定後読み (?<!...)

指定されたパターンが先行しない位置にマッチします。

例:(?<!\d)px は数字が先行しない px にマッチします。不正に使用されたCSS単位を見つけるのに便利です。

ブラウザサポート

すべてのモダンブラウザが後読みアサーション(ES2018+)をサポートしています。古い環境では先読みのみサポートされる場合があります。対象プラットフォームを必ず確認してください。

ユースケース

通貨記号が先行する場合のみ価格を抽出する、特定の句読点が後続しない単語にマッチする、パスワードの複雑さルールを検証するなど、特定のコンテキストでのみパターンをマッチさせる必要がある場合。

試してみる — Regex Cheat Sheet

フルツールを開く