パターン入力から一致の確認まで
この正規表現テスターは,JavaScript環境におけるパターンマッチングをブラウザ上で実行し,その結果を確認するためのツールです.利用者のブラウザに組み込まれている標準の正規表現エンジンを使います.パターン入力欄とテスト文字列入力欄を編集すると,実際のRegExp実行はDedicated Workerへ委譲され,入力したパターンと選択中のフラグから生成された正規表現で照合が行われます.
設定変更や画面離脱時には旧Workerが停止され,構文エラー,タイムアウト,上限超過,Worker利用不可が明確に区別されます.また,Unicode u フラグ有効時の空文字一致ではサロゲートペアを2コードユニット進めて処理されます.入力やフラグを変えるたびに非同期で結果が更新され,送信ボタンを押す必要はありません.
この評価処理には,入力されたパターンやテスト文字列を外部サーバーへ送信する処理はありません.ただし,サイトの閲覧にはアクセス解析や広告配信に伴う通信があります.「入力内容を評価のために送信しない」ことと「ページで通信が一切起きない」ことは異なります.機密性の高い文字列を試す際は,この区別を踏まえてください.
角括弧や丸括弧の閉じ忘れ,無効な量指定子などでパターンを生成できないときは,ブラウザの正規表現エンジンから得たエラーメッセージを画面に表示します.エラーの文言はブラウザによって異なり,必ずしも誤りの位置まで示すものではありません.パターン欄のコピー操作では,その欄の文字列だけをクリップボードへ渡します.
フラグや対象テキストを含んだ実行用コードを出力する機能ではないため,別のプログラムへ貼り付けるときは必要なフラグも確認してください.
ハイライトとキャプチャで結果を読む
パターンがテスト文字列に一致すると,入力欄の下にあるハイライトプレビューで該当部分が黄色く表示されます.入力欄そのものに色が付くわけではありません.右側の一致リストには一致テキスト,対象文字列内の開始・終了インデックス,丸括弧で取り出した番号付きキャプチャグループを表示します.一致しないときはリストは空になり,構文エラーとは別の状態として確認できます.
パターンや対象テキストを編集すると,その場で再評価が行われます.gフラグがなければ最初の一致だけを,gフラグがあれば通常は複数の一致をハイライトと一致リストで確認できます.ただし,yフラグを併用すると後述のように途中の不一致で探索が止まります.入力例を少しずつ変更し,開始・終了位置やキャプチャグループの変化を見比べると,どの部分がパターンに含まれているかを調べやすくなります.
結果がゼロ件のときも,対象テキストだけを変えて同じパターンを試せます.
例としてパターン (https?://)([\w.-]+) を入力し,対象文字列を「サポートサイトのURLは https://example.com です.」にした場合,https://example.com がハイライトされます.一致リストには同じ文字列と開始インデックス13,終了インデックス32が表示され,グループ1は https://,グループ2は example.com です.
パターン全体の一致と括弧で囲んだ部分の結果を分けて見られるため,どの部分を抽出しているかを確認できます.名前付きキャプチャを使った場合でも,この画面はグループ名のラベルを個別に表示せず,番号付きの結果を並べます.
表示するインデックスはJavaScript文字列のUTF-16コード単位に基づきます.サロゲートペアで表される絵文字などが前方に入ると,見た目の文字数と開始位置の数値が一致しない場合があります.JavaScriptの slice で取り出す位置には利用できますが,原稿の「何文字目」を数える値としてそのまま読むのは適切ではありません.対象文字列を変更したときも同じ基準でインデックスが再計算されます.
六つのフラグとプリセットの使い分け
入力欄の横では g,i,m,s,u,y の六つのフラグを個別に切り替えられます.g をオフにすると最初の一致を一件表示し,オンにすると regex.exec を繰り返し呼び出して複数の一致をリストにします.i は大文字と小文字を区別しない照合,m は ^ と $ を行頭・行末にも適用する照合,s はドットを改行にも一致させる照合に使います.
u はUnicode文字を含むパターンの解釈を変えますが,画面のインデックスを見た目の文字数に変更するものではありません.y は正規表現の lastIndex が示す位置からだけ一致を試みる sticky フラグです.この画面には lastIndex を手動で設定する欄はありません.
たとえばパターンを \d+,対象文字列を「123 456 789」として g と y を同時にオンにすると,最初の「123」は一致します.次はインデックス3の半角スペースから試すため不一致となり,画面の探索ループがそこで終了します.後方にある「456」と「789」は取得されません.g がオンでも常に離れた一致をすべて取り出せるわけではなく,y との組み合わせを確認する必要があります.
たとえば同じ英字が対象テキストに複数回出るとき,g のオン・オフで一件だけ確認するか,複数件をまとめて確認するかを選べます.複数行のテキストで行頭の形式を調べるときは m,改行をまたぐ部分をドットで照合したいときは s を試せます.フラグを変えるとパターンを変えなくても結果が変わるため,パターンとフラグの両方を記録して比較することが重要です.
メール,URL,日本の電話,日付,郵便番号の五つのプリセットもあります.選択すると現在のパターン,フラグ,テスト文字列があらかじめ用意された値に入れ替わります.これらは入力の手間を省くための初期値であり,選択直後にサンプルと一致することや,現実のあらゆるアドレス・電話番号・日付の妥当性を保証するものではありません.
たとえばメールのプリセットはパターンの先頭と末尾に ^ と $ を使いますが,サンプルは説明の文言を含む複数行です.mフラグもオフなので,選んだ直後には対象文字列全体がメールアドレスとして一致せず,結果がゼロ件になります.初期表示でも同様の組み合わせです.一致を試すには,対象文字列をメールアドレス一件だけに変更するか,対象文の途中から検索できるようにアンカーを調整します.
mをオンにしても各行の先頭に説明文がある場合は一致しません.アンカー,フラグ,対象文字列の関係を確認してから結果を読んでください.
この画面でできないことと重いパターンへの注意
このツールは一致箇所とキャプチャを確認する画面であり,文字列の置換,ファイルのアップロード,パターン・対象文字列・一致結果の保存はできません.抽象構文木の表示,正規表現エンジンの状態遷移の可視化,パターンの静的解析も提供していません.構文が有効で結果が表示されることは,パターンが安全であることや,あらゆる入力で効率的に動くことの証明にはなりません.
正規表現の評価はブラウザのメインスレッドではなくDedicated Workerへオフロードして実行されます.約1000ミリ秒の締切を要求してworkerを強制停止(terminate)する仕組みや,パターン2000文字,対象テキスト10万UTF-16コードユニット,マッチ数5000件,結果文字数の推計8MiBという上限値が設けられており,Workerが利用できない場合にメインスレッドへフォールバックすることはありません.
未対応構文は構文エラーとして即座に拒否され,実行時間超過とは区別されます.Workerの利用によりメインスレッドが正規表現処理で長時間占有されるリスクは大幅に低減されますが,実行環境の差異やバックグラウンドでのタイマー精度の影響により締切の厳密な実時間一致は保証されず,ブラウザ全体が絶対に固まらないことまでを保証するものではありません.
過度なバックトラックを含む重いパターンではタイムアウトで中断される可能性があるため,長文での性能や安全性の判断には適切な検証を併用してください.
一致を確認した後,実際に置換する用途にはテキスト置換ツール,一致部分やグループをまとめて出力する用途には正規表現抽出ツールを使えます.このテスターの一致リストはパターンの確認には便利ですが,他のツールへ一致結果そのものを送る連携機能はありません.必要なら確認したパターンをコピーし,移動先のツールで入力とフラグを改めて設定してください.