正規表現をテストするには?
パターンとサンプルテキストを入力すると、一致した箇所をすべて強調表示し、キャプチャグループを一覧表示します。global、multiline、大文字小文字の無視といったフラグもオン・オフできます。照合はブラウザー内で JavaScript 自身の正規表現エンジンを使って行われるので、結果はあなたのコードが見るものとまったく同じです。
完全にブラウザ内で動作 · アップロードなし · アカウント不要 · 透かしなし
- パターンを入力し、使いたいフラグにチェックを入れます。
- 検証したいサンプルテキストを貼り付けます。
- ハイライトを確認し、下の一致一覧を読みます。
ハイライト
一致
このページにできること
- 一致した箇所をリアルタイムで強調表示する
- オフセットとキャプチャグループを含む一致の一覧
- g、i、m、s、u フラグの切り替え
- 不正なパターンは黙って失敗せずに報告する
このツールを使うべき場面
- JavaScript の正規表現をサンプル文字列に対して試すとき。
- どのキャプチャグループとフラグがどの一致を生むかを見るとき。
- フロントエンドのコードに入れる前に、パターンをざっと確認するとき。
別の方法を選ぶべき場面
- パターンが Python、PCRE、.NET、Java 向けの場合。構文もバックトラッキングの挙動も JavaScript の RegExp とは異なります。
- 入力が信頼できず、パターンが壊滅的なバックトラッキングを起こしうる場合。テストはメインスレッドで動くため、タブが固まることがあります。
- ステップごとの説明、ベンチマーク、タイムアウトが必要な場合。
他の方法との違いと限界
regex101 などのツールは、エンジンを切り替え、各トークンを説明し、タイムアウトを課せます。このページはブラウザー自身の RegExp を、そうした保護なしに動かすので、JavaScript に忠実である一方でその限界も引き継ぎます。アトミックグループも絶対的量化子もなく、病的なパターンに対する防護もありません。意図的に悪い式を書くと、タブを閉じるまで固まらせることができます。
あなたのファイルはどこへ
どこへも行きません。このページは処理を行うコードを読み込み、それ以降、あなたが開いたファイルはあなた自身のブラウザが読みます。アップロードの手順も、サーバー上の一時コピーも、信じる必要のある後片付けもありません。データはネットワークを一度も渡らないので、後から消すものは何も残りません。自分で確かめられます。ツールの実行中にブラウザのネットワークパネルを開いて、何も通信しないことを見てください。
このツールについての質問
- 自分のパターンを使ったらページが応答しなくなりました。なぜですか?
- それは壊滅的なバックトラッキングです。(a+)+b のようなパターンを長い「a」の連続に対して使うと、エンジンが失敗する組み合わせを指数的に試します。このページは一致件数に上限を設けて無限に膨らまないようにしていますが、1 件の手強い一致に時間がかかることはあります。入れ子の量化子を書き直して経路を 1 つに絞る(たとえば a+b)か、^ や $ でパターンを固定してください。
- どのフラグをオンにできますか?
- g は最初の 1 件ではなくすべての一致を探し、i は大文字小文字を無視し、m は ^ と $ を改行位置に一致させ、s は . を改行にも一致させ、u は完全な Unicode モードを有効にします。\p{...} のプロパティエスケープや基本多言語面外の文字を正しく扱うには u が必要です。結果は JavaScript 自身のエンジンが返すものとまったく同じなので、あなたのコードと一致します。
- 一致が数千件しか表示されないのはなぜですか?
- すべての文字に一致するパターン(たとえば長い文書に対する . と global フラグ)が、何千行も組み立てる間にタブを固まらせないよう、一覧に上限を設けているためです。上限は現実的なテスト文字列には十分高く、そこに達したらパターンを絞るかサンプルを短くしてください。