このツールとは?
正規表現(regex)は、テキストの検索、検証、抽出を行うための簡潔なパターン言語です。たとえば、メールアドレス用のパターンを使えばフォーム入力の検証が可能になり、\d{4}-\d{2}-\d{2} といったパターンで日付を抽出でき、キャプチャグループを使えば必要な部分を取り出すことができます。ほぼすべてのプログラミング言語やエディタが正規表現に対応しています。
このテスターは、Node.js やあらゆるブラウザで動作するものと同じ JavaScript の正規表現エンジンを使用しているため、ここで作成したパターンは、JavaScript や TypeScript のコードでもまったく同じように動作します。また、ほとんどのパターンは、Python、Java、Go でも変更なしで動作します。
なぜこれを使うのか?
- リアルタイムのフィードバック:パターンを入力すると、一致する部分が黄色でハイライト表示されます。
- 一致ごとに表示されるキャプチャグループ — $1 と $2 に何が含まれるかを正確に確認できます。
- フラグの完全サポート:g(すべての一致)、i(大文字小文字を区別しない)、m(複数行)、s(ドットが改行と一致する)、u(ユニコード)。
- パターンに構文エラーがある場合、エラーメッセージを表示する。
- 無料かつプライバシー保護 — パターンやテキストはブラウザの外に出ることはありません。
使い方
- 2つの「/」の間にパターンを入力してください(スラッシュを自分でエスケープする必要はありません)。
- 2つ目の「/」の後の小さなボックス内のフラグを調整してください。デフォルトの「g」オプションでは、すべての一致が検出されます。
- 以下の欄にテスト用のテキストを貼り付けてください。
- 一致した箇所が即座にハイライト表示され、その下にグループが一覧表示されます。
- パターンが無効な場合、エラーメッセージに問題点が説明されます。
例
入力
Pattern: (\w+)@(\w+)\.com
Test string: Contact alice@example.com or bob@test.com出力
✓ 2 matches
#1 groups: $1=alice $2=example
#2 groups: $1=bob $2=test括弧はキャプチャグループを作成し、置換処理内で $1 や $2 として参照することができます。
実用的なヒント
- メールアドレスの入力を検証する場合? ^[^\s@]+@[^\s@]+\.[^\s@]+$ は、明らかな入力ミスを捕捉しつつ、有効ではあるが一般的ではないアドレスを拒否しない許容性の高いパターンです。RFC 5322 に完全に準拠するには、ワンライナーではなくライブラリが必要です。
- URLからクエリパラメータを抽出する:[?&]([^=]+)=([^&]*) に g フラグを指定し、& や = で手動で分割する代わりに、一致ごとに $1/$2 を読み取る。
- .replace() でパターンを使用しようとしていますか?まずはここでテストしてみてください。ハイライト表示されている部分が、キャプチャグループも含めて、.replace() が実際に処理する範囲です。
- 複数行にわたるログの解析(各行の先頭にあるタイムスタンプに一致させる)? m フラグを追加すると、^ および $ が文字列全体ではなく、各行ごとにアンカーとして機能するようになります。
- PythonやPHPのパターンをコピーしたのに、ここでうまく機能しない? (?P<name>...) という名前のグループがないか確認してください。JavaScriptでは (?<name>...) を使用し、「P」は付きません。また、JavaScriptの正規表現には存在しない所有格の量指定子 (++, *+) がないか確認してください。
汎用的なものではなく、JavaScript用の正規表現テスターです
このツールは、JavaScriptの組み込み正規表現エンジン(RegExpエンジン)を実行します。これは、ブラウザのコンソールやNode.jsにおけるstr.match(pattern)やpattern.test(str)の背後にある、まさにそのコードパスそのものです。 これは、PCRE(PHPで使用され、多くの「汎用」正規表現テスターがデフォルトで採用しているもの)やPythonのreモジュールによるテストとは異なります。 JavaScriptには所有格量指定子や原子グループが存在せず、名前付きキャプチャグループには、PCREやPythonの (?P<name>...) ではなく (?<name>...) が使用されます。
JS や TypeScript 内でパターン(フォームの検証、ルートマッチャー、ログパーサーなど)を使用しようとしている場合、ここでテストを行えば、期待通りの結果が得られます。つまり、このページでハイライト表示される部分が、実行時に new RegExp(pattern, flags) が一致させるものと完全に一致するのです。
実際のワークフローにおける位置づけ
正規表現のテストは、単独で行われることはめったにありません。一般的な手順は、ここでパターンを確認し、コード内で実際に .replace() を実行し、その後、置換前後のテキストを比較して、置換が期待どおりに動作し、それ以外の影響がないことを確認するというものです。
キャプチャグループを使用して構造化データを抽出すると、多くの場合、そのデータはそのままJSONとして出力されます。抽出された出力のフォーマットを確認し、期待どおりに解析されているかを確認してください。
→ テキストの差分 · JSONフォーマッタ
よくある質問
このテスターはどの種類の正規表現を使用していますか?
JavaScript(ECMAScript)は、あらゆるブラウザやNode.jsに搭載されているエンジンです。中核となる構文は移植性がありますが、言語によって一部の機能が異なります。例えば、ルックビハインドのサポートや名前付きグループの構文は、PythonとJavaで異なります。
なぜ私のパターンでは最初の一致しか見つからないのですか?
g(グローバル)フラグが指定されていません。g フラグがない場合、正規表現は最初の一致で終了します。このツールではデフォルトで g が指定されています。g フラグを削除していないか確認してください。
なぜ、. は私の改行と一致しないのですか?
デフォルトでは、. は改行以外の任意の文字に一致します。s フラグ(dotall)を指定すると、. が改行にも一致するようになります。また、移植性を高める代替手段として [\s\S] を使用することもできます。
キャプチャグループの結果は何を意味しているのでしょうか?
パターン内の各括弧ペアは、一致したテキストをキャプチャします。$1 は最初のグループ、$2 は 2 番目のグループというように続き、これらは置換操作や抽出コード内で参照するものです。
なぜ正規表現の処理が遅くなったり、フリーズしたりするのでしょうか?
一致しない入力に対して、(a+)+ のような入れ子になった量指定子が原因で、おそらく致命的なバックトラッキングが発生しています。曖昧な繰り返しを避けるよう、パターンを書き直してください。このツールは応答性を維持するため、一致回数を1000回に制限しています。