正規表現テスター
リアルタイムのハイライト表示、キャプチャグループ、置換プレビューで正規表現をテストできます — すべてブラウザ内で完結。
エンジン:ブラウザが実行する JavaScript (ECMAScript) の正規表現です。PCRE、Python、Go、Java、.NET とは動作が異なる場合があります。
パターンの解説
パターンを入力すると、トークンごとの解説が表示されます。
パターン集
パターンをクリックすると、サンプルテキストとともにテスターに読み込まれます。
1 行に 1 ケース。パターンが一致すべき場合は行頭に「+ 」、一致してはいけない場合は「- 」を付けます(ここでは g と y フラグは無視されます)。
コードを生成
パターンを入力すると、コードが生成されます。
パターンは記述したとおりにコピーされます(名前付きグループ、フラグ、置換トークンのみ調整されます)。後読み、後方参照、Unicode への対応は、対象のエンジンで確認してください。
- \d — 任意の数字(0〜9)
- \w — 任意の単語構成文字(英字・数字・アンダースコア)
- \s — 任意の空白文字
- . — 改行以外の任意の1文字
- ^ — 文字列の先頭(multilineフラグ使用時は各行の先頭)
- $ — 文字列の末尾(multilineフラグ使用時は各行の末尾)
- * — 直前のトークンの0回以上の繰り返し
- + — 直前のトークンの1回以上の繰り返し
- ? — 直前のトークンの0回または1回
- {n,m} — n回からm回までの繰り返し
- (...) — キャプチャグループ、(?:...) — 非キャプチャグループ
- \b — 単語境界、| — 選択(OR)
ブラウザ上での正規表現テストは、実際どのように動いているのか?
正規表現とは、テキストにマッチさせるためのコンパクトなパターン記述言語です。「これはメールアドレスらしい形をしているか」を判定することから、「この文書内のすべての電話番号を見つける」こと、「この文字列からHTMLタグを取り除く」ことまで、幅広い用途に使われます。厄介なのは、正規表現の構文は微妙な書き間違いが非常に起きやすいという点です。本来エスケープすべきなのにそのままの `.`、意図した以上に飲み込んでしまう貪欲な `*`、思ったものをキャプチャしていないグループ……。パターンを勘だけで書き、それが間違っていたと気づくのが本番データに対してすでに実行された後だった、というのは苦い教訓の学び方です。
このツールは、JavaScriptに標準で組み込まれた `RegExp` エンジンだけを使って完全に動作し、入力した瞬間にブラウザ内で直接実行されます。サーバーは一切介在しないため、テスト対象のテキスト(実際のユーザーデータかもしれませんし、ログの一行、あるいはサードパーティのサービスには貼り付けたくない何かかもしれません)が端末の外に出ることは一切ありません。本番環境でJavaScriptコードが実際に動かすのとまったく同じエンジンを使っているため、ここで見えるもの——どの文字がマッチするか、貪欲な量指定子がどう振る舞うか、グループが何かをキャプチャしたかどうか——は、別の正規表現フレーバーによる近似ではなく、実行時にそのまま得られる結果です。
パターンを入力し、必要なフラグを有効にしてください。最初の1件で止まらずすべてのマッチを探す `g`、大文字・小文字を区別しない `i`、文字列全体ではなく各行の先頭・末尾に `^` と `$` をマッチさせる `m`、`.` が改行にもマッチするようにする `s` などがあります。テスト文字列内のすべてのマッチはリアルタイムでハイライトされ、それぞれが完全一致テキスト・位置・キャプチャグループ(`(?<year>\d{4})` のような名前付きグループを含む)に分解されて下に一覧表示されるので、抽出したかったグループが実際にマッチしているものと一致しているかをすぐに確認できます。置換セクションには、パターンと置換文字列(`$1` や `$<year>` のようなグループの後方参照を含む)を使って `String.replace()` が実際に生成する結果がそのまま表示されます。
下部の早見表には、作業の途中でつい忘れがちなトークン——`*` と `+` の違い、非キャプチャグループ `(?:...)` が何のためにあるのか、`\b` がどのように単語境界を示すのか——がまとまっているので、調べるためにページを離れる必要はありません。現実的なテストデータに対して思い通りに動くパターンができあがれば、そのままコードに組み込む準備は完了です。周辺のデータそのものを検証したり整形し直したりする必要がある場合は、JSON Formatter & Validatorツールや Text Diff Checkerツールが良い相棒になります。
よくある質問
不適切な正規表現パターンでページが固まることはありますか?
ありません。マッチ処理は別の Web Worker 内で強制タイムアウト付きで実行されるため、壊滅的なバックトラッキングを起こすパターンでもタブがロックすることはありません。
名前付きキャプチャグループと番号付きグループは表示されますか?
はい。各一致について、番号付きグループと、(?<year>\d{4}) のような名前付きグループが一覧表示されます。
コードで使う前に、置換結果をプレビューできますか?
はい。置換パネルには、グループへの後方参照も含め、String.replace() が実際に出力する結果がそのまま表示されます。