正規表現テスター
JavaScriptの正規表現をテキストに対して試し、すべての一致とキャプチャグループをブラウザ内で確認できます。
すべてブラウザ内で動作します。アップロード、記録、保存は一切行いません。
ハイライト表示
| # | 一致 | 位置 | グループ |
|---|
パターンを入力し、一致させたいテキストを貼り付けると、何を捉えて何を取りこぼすかがすぐにわかります。キャプチャグループもそれぞれ分けて表示されます。
仕組み
パターンはブラウザがコンパイルし、入力に合わせてテキストに対して実行されます。同じエンジンなので、表示されるのは同じ正規表現がJavaScriptで行うこととまったく同じです。
gフラグを付けるとすべての一致が、付けないと最初の一致だけが表示されます。iフラグは大文字と小文字を区別せず、mは^と$を行の境界で一致させ、sはドットを改行にも一致させ、uはUnicodeモードを有効にし、yは検索をlastIndexの位置に固定します。
番号付きのキャプチャグループは順番に表示されます。(?<name>...)と書いたグループは、その名前で表示されます。
例
| ケース | 入力 | 結果 |
|---|---|---|
| ISO形式の日付を各部分に分解 | (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) | 年・月・日を名前付きグループとして |
| 投稿内のすべてのハッシュタグ | #\w+ | gフラグでハッシュタグごとに1つの一致 |
よくある質問
これはどの種類の正規表現ですか?
ブラウザが実装しているJavaScriptの正規表現です。PHPやgrep -Pが使うPCRE、Goが使うRE2とは、後読み、強欲な量指定子、Unicodeプロパティのエスケープが異なります。ここで動くパターンがそちらでも動くとは限りません。
パターンを入力している途中でページが固まりました。
パターンによっては、特定のテキストに対して壊滅的なバックトラックを起こします。(a+)+のような入れ子の量指定子が典型例です。テキスト全体の検索には上限があり、警告を出して打ち切りますが、暴走した1回の照合はページ内の何によっても止められません。JavaScriptには、一度実行を始めた正規表現を中断する方法がないのです。タブを再読み込みし、これを事故ではなく発見と受け止めてください。同じ正規表現をサーバーで使えば、プロセスがひとつ止まってしまいます。
スラッシュは付ける必要がありますか?
いいえ。パターンだけを入力し、フラグはフラグ欄に入れてください。/abc/giをパターンとして貼り付けると、スラッシュも検索対象の一部になってしまいます。
テスト用テキストはどこかに送信されますか?
いいえ。しかも、共有できるリンクからも意図的に除外されています。リンクをコピーして共有されるのはパターンとフラグだけで、テストに使ったテキストは決して含まれません。
知っておきたいこと
- パターンがサーバーで実行されることはありません。訪問者が入力した、ひどいバックトラックを起こす正規表現は、サーバーではサービス拒否攻撃になりますが、タブの中ならタブひとつ分の負担で済みます。