正規表現テスターでできること
正規表現(regex)は、テキストを検索するための小さなパターン言語です。\d{4} は「数字が4つ連続」を意味します。[\w.+-]+@ は「単語構成文字、ドット、プラス記号、ハイフンが1つ以上続き、その後に @ がある」を意味します。正規表現は、コードエディタでの検索・置換、フォームの入力チェック、ログの分析、データの整理などに使われます。
パターンは少し間違えやすいものです。テスターを使えば、スクリプトに組み込む前に実際のサンプルテキストでパターンを試し、何に一致するかを正確に確認できます。このツールは入力と同時に一致箇所を表示し、すべてのキャプチャグループを一覧にして、置換結果もプレビューします。
正規表現テスターの使い方
- 「正規表現」欄にパターンを入力します。スラッシュは不要です。ツールがスラッシュを表示し、閉じスラッシュの後に有効なフラグを表示します。
- g、i、m、s、u、y のボタンでフラグのオン・オフを切り替えます。
- 「テスト用テキスト」欄にサンプルテキストを貼り付けるか入力します。
- 「一致」欄で結果を確認します。一致した箇所はハイライトされ、カウンターに見つかった数が表示されます。
- 「一致の詳細とグループ」で、各一致の位置と、各グループが捉えたテキストを確認します。
- 検索と置換を試すには、「置換文字列」欄に入力します。変更後のテキストが「結果」欄に表示され、そのままコピーできます。
どこから始めればよいかわからない場合は、「よく使うパターン」から選んでください。メールアドレス、Webアドレス、日付、IPv4 アドレス、16進数のカラーコード、電話番号、数値、連続した2つのスペースのパターンがあります。
フラグ
| フラグ | 名前 | 変わること |
|---|---|---|
| g | global | 最初の一致だけでなく、すべての一致を見つけます |
| i | ignore case | hello が Hello や HELLO にも一致します |
| m | multiline | ^ と $ が各行の先頭と末尾に一致します |
| s | dot all | . が改行にも一致します |
| u | unicode | 絵文字を1文字として扱い、\p{...} クラスが使えるようになります |
| y | sticky | 各一致は、直前の一致が終わった位置からちょうど始まる必要があります |
日本語を扱うときは u フラグが役立ちます。JavaScript の \w は英数字とアンダースコアにしか一致せず、ひらがなや漢字には一致しません。日本語の文字を指定したい場合は、u フラグをオンにして \p{Script=Hiragana}、\p{Script=Katakana}、\p{Script=Han} などを使ってください。たとえば ひらがなとカタカナ ABC に \p{Script=Hiragana}+(フラグ gu)を使うと、一致するのは ひらがなと です。
使用例
以下は、このツールでパターンを実行した結果です。
| パターン | フラグ | テキスト | 一致 |
|---|---|---|---|
\d+ |
なし | a1 b22 c333 |
1 |
\d+ |
g | a1 b22 c333 |
1、22、333 |
hello |
gi | Hello hello HELLO |
Hello、hello、HELLO |
^\w+ |
gm | 2行:one two と three four |
one、three |
a.b |
g | a、改行、b |
一致なし |
a.b |
gs | a、改行、b |
1件一致 |
ページを開くと、日付の例が読み込まれます。パターン (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) は、サンプルテキストから 2026-10-31、2024-01-15、2026-11-02 の3つの日付を見つけます。置換文字列 $<day>/$<month>/$<year> を使うと、最初の日付は 31/10/2026 になります。
置換は、テキストの整理にも便利です。パターン \s{2,} と、置換文字列に半角スペース1つを指定すると、too many spaces は too many spaces になります。なお JavaScript の \s は全角スペースにも一致するため、このパターンは全角スペースが混じった連続空白もまとめて置き換えます。
仕組み
テスターは、入力されたパターンとフラグから JavaScript の RegExp を作り、テスト用テキストに対して実行します。g フラグがあれば、最後まで検索を続けます。空文字列の一致は1文字進めて処理するので、x* のようなパターンで無限ループになることはありません。
テキストはハイライトの前にエスケープされます。サンプルテキストに HTML やスクリプトが含まれていても、ただの文字として表示され、実行されることはありません。
マッチングは、バックグラウンドのスレッドである Web Worker で行われます。パターンの処理が1秒を超えると、そのワーカーを停止して新しいワーカーを起動します。タブが固まる代わりに、メッセージが表示されます。
パターンが無効な場合は、ブラウザのエラーメッセージが表示されます。たとえば ( だけを入力すると、「Unterminated group」(グループが閉じられていない)というエラーになります。
ヒントと制限
- 繰り返しの入れ子に注意しましょう。
(a+)+$や(\w+\s?)*$のようなパターンは、ほぼ一致するテキストに対して膨大な時間がかかることがあります。これを壊滅的なバックトラックと呼びます。各部分が具体的なものに一致するようにし、繰り返しの中に繰り返しを入れないようにしてください。 - 特殊文字はエスケープしましょう。 ドットそのものに一致させるには
\.と書きます。? * + ( ) [ ] { } ^ $ |とバックスラッシュ自体も同様です。 - 入力チェック用のパターンにはアンカーを付けましょう。 フォームの入力欄に使う場合は、パターンを
^と$で囲み、値の一部ではなく全体が一致するようにします。 - 正規表現は完全なパーサーではありません。 テキストからメールアドレスや日付を見つけるのには十分ですが、HTML の解析や、メールアドレスが実在するかの確認には向いていません。
- 非常に多い結果には上限があります。 一致は最大5,000件まで一覧表示し、詳細の表には最初の300行を表示します。
そのほかの正規表現のテスト方法
コマンドラインでは、grep -oE で各一致を1行ずつ表示できます。
echo 'Call 555-010-9999 on 2026-10-31' | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}'
これで 2026-10-31 と表示されます。Python では、re.findall(r'\d{4}-\d{2}-\d{2}', 'from 2026-10-31 to 2024-01-15') が ['2026-10-31', '2024-01-15'] を返します。JavaScript では、text.match(/pattern/g) を使うか、グループが必要なら text.matchAll() を使います。
関連ツール
Webアドレス用にタイトルを整えるには、スラッグ生成ツールを使ってください。リンクの中で安全に使えるようにテキストを変換するには、URLエンコード・デコードを使ってください。