Regex
正規表現テスター
自分のテキストに対して正規表現をリアルタイムでテストします。
正規表現について
正規表現(regex)は、文字列の集合を表すパターンであり、テキストの検索、検証、抽出に使われます。このテスターは JavaScript のネイティブな正規表現エンジンをブラウザ内で完全に実行するため、実際のテキストに対してパターンを試し、何が一致するかを正確に確認できます。
量指定子には混同しやすい 2 つの種類があります。貪欲な量指定子(+、*、{2,5})は、パターンの残りが一致できるように後退(バックトラック)する前に、できるだけ多くのテキストを消費します。一方、対応する怠惰な量指定子(+?、*?、{2,5}?)は逆にできるだけ少なく消費します。<a><b> に対して <.+> を使うと貪欲な一致は文字列全体を取り、<.+?> は最初の > で止まります。グループにも似た分岐があります。(...) は後で参照するために一致したテキストをキャプチャしますが、(?:...) はキャプチャせずに同じようにグルーピングするだけで、グループ化の優先順位は必要でも出力は不要なときに便利です。
使われる場面
- メールアドレス、電話番号、郵便番号などの入力形式を検証する
- ログ行や非構造化テキストから構造化された値を抽出する
- 多数のファイルにわたるリファクタリングのための検索・置換パターンを作成する
- パターンが想定より多く、または少なく一致する理由を調べる
よくある質問
パターンが1回しか一致しないのはなぜですか?
g(グローバル)フラグがない場合、JavaScript の正規表現メソッドは最初の一致で停止します。これはこのツールの制限ではなく、実際のコードでも見られる動作です。すべての一致を見つけるには g を有効にしてください。
ここに入力した内容はサーバーに送信されますか?
いいえ。マッチングは JavaScript の組み込み正規表現エンジンを使ってブラウザ内で完全に行われ、どこにも送信されません。これにより、意図的に低速な「カタストロフィックバックトラッキング」パターンにサーバーをさらすことも避けられます。
パターンによってページが固まることがあるのはなぜですか?
(a+)+ のような入れ子になった量指定子を含む特定のパターンは、カタストロフィックバックトラッキングを引き起こす可能性があり、入力長に対してマッチング時間が指数的に増加します。パターンが固まる場合は、このツールではなくパターン自体が原因です。より短いテスト文字列を試すか、入れ子の繰り返しを避けるようにパターンを書き直してください。
貪欲な量指定子と怠惰な量指定子の違いは何ですか?
貪欲な量指定子(+、*、{2,5})はまず可能な限り多くのテキストに一致させ、それによってパターンの残りが失敗する場合にのみ後退します。末尾に ? を付けて書く怠惰な対応版(+?、*?)は逆に可能な限り少なく一致させ、必要なときだけ広げます。<a><b> に対して、貪欲な <.+> は文字列全体に一致し、怠惰な <.+?> は最初の > で止まります。「できるだけ短い一致」が本当に求めているものであれば、怠惰な量指定子を使うとよいでしょう。