iGotTools

正規表現パターンのテスト方法

ブラウザで正規表現をテスト。パターンとテスト文字列を入力し、フラグを切り替え、一致とキャプチャグループを調べ、置換をローカルでプレビューします。

開発ツール

正規表現が強力なのはコンパクトだからこそですが、そのコンパクトさゆえに、微妙な誤りを起こしやすいという側面もあります。正しく見えるパターンが、一致しすぎたり、少なすぎたり、まったく一致しなかったりすることはよくあります。確実に確かめる唯一の方法は、実際のテキストに対して実行することです。正規表現テスターは、JavaScriptの正規表現をブラウザ内で実行し、キャプチャグループを含むすべての一致を表示し、置換をプレビューします — すべてテキストをアップロードせずに行います。

概要

実際の入力に対して正規表現を開発・検証できます。完全にローカルで。

  • 一致とグループが見える — 各一致はテキスト、インデックス範囲、キャプチャグループ(名前付きグループを含む)を一覧表示します。
  • 置換をプレビュー — 置換文字列を入力すると変更後の結果が即座に表示され、変化がない場合はその旨を伝えます。
  • JSの7フラグすべて — g、i、m、s、u、y、d を切り替え、結果の更新を確認できます。

正規表現とは

正規表現とは、文字列の集合を記述するパターンです。テキストの検索・検証・抽出・置換を行う標準的な道具で、どのプログラミング言語にも組み込まれています。JavaScriptでは正規表現は RegExp オブジェクトで、リテラル(/\d+/g)として、あるいは構築して(new RegExp("\\d+", "g"))書きます。

正規表現が担うよくある仕事:

  • 検証 — 「この文字列はメールアドレス、日付、電話番号の形をしているか?」
  • 抽出 — 「文中のすべてのURL、すべての数値、すべての引用句を取り出す。」
  • 置換 — 「すべてのプレースホルダーを実際の値に置き換える」「空白をすべて正規化する。」

正規表現は簡潔で記号的なので、文字一つの場所違えで意味が変わります。代表的な入力でテストすることが、「動くと思う」を「動く」に変える方法です。

正規表現パターンの構成要素

パターンはいくつかの構成要素から組み上がります。名前で把握しておくとパターンが読みやすくなります。

  • リテラル — 自分自身に一致する通常の文字。catcat の順に一致します。
  • 文字クラス — 角括弧内に許容文字の集合を書きます。[a-z] は任意の小文字に一致し、\d[0-9]\w は単語文字、. は(ほぼ)任意の文字の簡易表記です。
  • 量指定子 — 直前の要素が何回繰り返すか。* は0回以上、+ は1回以上、? は0回か1回、{n}{n,m} は厳密または上限付きの回数です。
  • アンカー — 文字ではなく位置。^ は(m フラグ時は行の)先頭、$ は末尾に一致します。
  • グループ — 丸括弧 (...) は一致の一部をキャプチャし、後で参照できるようにします。名前付きグループ (?<year>\d{4}) はキャプチャに読みやすい名前を与えます。
  • 選択cat|dogcat または dog に一致します。

これらを組み合わせてパターンを書き、テキストに当てはめて確認します。

フラグ

フラグはパターン全体の振る舞いを変え、閉じスラッシュの後に付けます(例 /x/gi)。テスターはJavaScriptの7つのフラグを切り替えとして公開しています。

  • g(グローバル) — 最初だけでなくすべての一致を探します。g がないと最初の一致で止まります。
  • i(大小無視) — 大文字小文字を区別せず一致させ、[a-z] が大文字にも一致するようにします。
  • m(複数行)^$ が文字列全体だけでなく各行の先頭・末尾にも一致するようにします。
  • s(ドット全体). が通常は一致しない改行文字にも一致するようにします。
  • u(Unicode) — パターンをUnicodeコードポイントとして扱い、絵文字や非ASCII文字に必須です。
  • y(Sticky)lastIndex の位置でのみ一致させ、各検索を正確な位置に固定します。
  • d(インデックス) — 各キャプチャグループの値に加え、開始・終了インデックスを公開します。

日常ではたいてい gi だけで足り、残りは複数行テキスト、Unicode、高度な走査で現れる特定のケースを解決します。

手順:パターンをテストする

正規表現テスターを開き、次の流れで進めます。

  1. パターン欄にパターンを入力 — 囲みのスラッシュやフラグなしで書きます。ツールがリテラルを組み立てます。
  2. テスト文字列欄にテスト文字列を貼り付け — パターンが探す対象のテキストです。
  3. 必要なフラグを切り替え — g、i、m、s、u、y、d。切り替えるたびに結果が更新されます。
  4. 「一致」タブを確認 — 各一致は一致したテキスト、インデックス範囲、キャプチャグループ(名前付きグループは名前付きで表示)を示します。何も一致しなければ「一致なし」と表示されます。
  5. 「置換」タブに切り替え置換文字列を入力します($1$<name> でキャプチャグループを参照できます)。ツールは text.replace(regex, replacement) を実行し、変更後の結果を表示し、変化がなければその旨を伝えます。
  6. コピーまたはリセット正規表現をコピー でリテラル、要約をコピー で一致一覧、置換結果をコピー で置換結果、リセット で全消去できます。

どこから始めればよいか分からなければ、サンプル ドロップダウンが 日付/メール/URL/単語 の完成したパターンとテキストを読み込み、すぐに動く例を見せます。

制限とJavaScript固有の注意点

ツールが期待通りであるための、正直な制約をいくつか挙げます。

  • JavaScriptエンジン専用 — ツールはブラウザ内で new RegExp(pattern, flags) を実行するため、JavaScriptの正規表現エンジンを反映します。PCRE、Python、Javaではありません。他のエンジン向けに書かれたパターンは挙動が異なることがあり、ツールがパターンを「解説」することはありません。
  • サイズに上限あり — パターンは500文字、テスト文字列は20,000文字までです。超えると実行せずに問題を指摘します。
  • 一致は200件まで — パターンが200回を超えて一致すると、ツールは最初の200件を「最初の200件を表示しています。」の通知とともに表示します。検証には十分で、巨大な入力の計数にはパターンを絞り込んでください。
  • 後読みはエンジンと世代による — JavaScriptの後読み((?<=...))はモダンブラウザでサポートされますが、古いエンジンにはなく、PCREとも異なります。後読みが失敗する場合、大抵はそれが理由です。

よくある質問

PCREに対応していますか?

いいえ。ツールはJavaScriptの RegExp エンジン(new RegExp(pattern, flags))を使い、固有の構文と機能セットを持ち、PCRE互換ではありません。再帰パターンや特定のPOSIXクラスなどPCRE専用の機能はここでは動きません。JavaScriptエンジン向けにパターンを書くか、テスト前にPCREパターンを変換してください。

キャプチャグループとは?

パターン内の丸括弧 ( ... ) はキャプチャグループを作り、一致したテキスト部分を覚えておき、後で参照できるようにします — 置換では番号($1$2)で、あるいは名前付きグループ (?<name> ...) を書けば名前で参照できます。「一致」タブは各グループの値(と名前、あれば)を表示し、それによってパターンが意図通りにキャプチャしていることを確かめられます。

テキストを置換するには?

「置換」 タブに切り替え、置換 を入力します。ツールは現在のフラグで text.replace(regex, replacement) を実行し結果を表示します。グループは $1$2、… で、名前付きグループは $<name> で参照できます。グローバルフラグ g がオフなら最初の一致だけが置換されます。変化がないときは、ツールがそのまま伝えます。

なぜ200件だけなのですか?

安全と速度のためです。パターンは大きな文書で何千回も一致し、すべてを表示すればページがほぼ止まるまで遅くなります。200件の上限は、パターンが意図通りに一致しているかを検証するには十分です。全体の件数が必要なら、パターンをより絞り込むか、より小さな抜粋でテストしてください。

iGotTools

このツールから始める

今すぐ始める