正規表現テスター
正規表現パターンとテスト文字列を入力すると、マッチ箇所をハイライト表示し、キャプチャグループの値を一覧表示します。g/i/m/s/uフラグに対応、JavaScriptのRegExpをそのまま使用します。
よく使う正規表現パターン一覧
| 用途 | パターン | 説明 |
|---|---|---|
| メールアドレス | ^[\w.+-]+@[\w-]+\.[\w.-]+$ | @の前後にユーザー名とドメインを持つ簡易的なメールアドレス形式を検証します(完全なRFC準拠ではありません)。 |
| 日本の電話番号 | ^0\d{1,4}-\d{1,4}-\d{4}$ | ハイフン区切りの固定電話・携帯電話番号(例: 03-1234-5678、090-1234-5678)にマッチします。 |
| URL | https?:\/\/[\w.-]+(?:\/[\w\-./?%&=]*)? | http:// または https:// で始まるURL文字列を抽出します。クエリパラメータやパスも含みます。 |
| 日本の郵便番号 | ^\d{3}-\d{4}$ | 「123-4567」の形式(3桁-4桁)の郵便番号にマッチします。 |
| HEXカラーコード | ^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$ | CSSで使われる#RRGGBB形式または省略形#RGB形式のカラーコードにマッチします。 |
| 半角数字のみ | ^[0-9]+$ | 文字列全体が半角数字(0〜9)のみで構成されているかを検証します。 |
Tips
- 入力欄の右側に表示される
/フラグを見ると、現在チェックしているフラグの組み合わせがひと目で確認できます。 - キャプチャグループは
()で囲んだ部分だけが対象です。グループ化せずに条件だけ指定したい場合は(?:...)(非キャプチャグループ)を使うとグループ一覧が煩雑になりません。 - gフラグを外すと最初の1件のみがマッチします。すべての出現箇所を数えたい場合はgフラグを必ずONにしてください。
- 「サンプルを挿入」ボタンでメールアドレス抽出の実例パターンを読み込めるので、キャプチャグループの挙動を確認する際の出発点として使えます。
- このツールの判定処理はすべてブラウザ内で完結しており、入力したパターンやテスト文字列がサーバーに送信されることはありません。
よくある質問
[abc]・\d・+・*など)はほぼ共通ですが、名前付きグループの記法や先読み・後読みの対応状況、フラグの種類には言語ごとに細かな違いがあります。このツールはJavaScriptのRegExp仕様に準拠しているため、他言語での動作を保証するものではありません。*・+・?)の前に対象がない、不正な文字クラスなど、JavaScriptのRegExpコンストラクタが構文エラーと判定した場合に表示されます。エラーメッセージにヒントが含まれているので、括弧の対応や特殊文字のエスケープ(\.や\(など)を確認してください。
余談ですが ― 正規表現エンジンの内部で起きていること
正規表現(Regular Expression)はもともと1950年代に数学者スティーブン・クリーネが提唱した「正規言語」の理論に由来します。これをUNIXの初期のテキストエディタedやコマンドgrep(globally search a Regular Expression and Printの略)が実装として取り入れたことで、テキスト処理の実用ツールとして急速に普及しました。grepという名前自体が正規表現の操作コマンドに由来しているのは象徴的です。
JavaScriptのRegExpエンジンは内部的に「バックトラック法」という戦略でマッチングを行います。パターンの各要素を順番に試し、途中で失敗したら一歩戻ってやり直す仕組みです。この方式は柔軟な反面、(a+)+bのようなパターンと長い非マッチ文字列の組み合わせでは試行回数が指数関数的に増える「破滅的バックトラック(catastrophic backtracking)」を引き起こし、ブラウザやサーバーをフリーズさせることがあります。複雑なパターンを本番コードで使う前は、必ず様々な入力でテストすることが重要です。
グローバル(g)フラグを付けた正規表現オブジェクトは、内部にlastIndexというカーソル位置を保持し、exec()を呼ぶたびに続きから検索を再開します。同じ正規表現オブジェクトを使い回すと意図せずこのカーソルが残ってしまうことがあるため、このツールでは毎回新しいRegExpインスタンスを生成して意図しない状態の持ち越しを防いでいます。
名前付きキャプチャグループ((?<name>...))はECMAScript 2018で追加された比較的新しい機能です。番号ではなく名前でグループを参照できるため、パターンが複雑になるほど可読性が向上します。日付のパースなど「どのグループが何を意味するか」が重要な場面で特に有用です。