本文へスキップ
kitto works
ツール一覧

正規表現テスター|パターン検証・マッチハイライト(JavaScript)

JavaScriptの正規表現パターンをその場でテストし、マッチ箇所のハイライトや番号付き・名前付きキャプチャグループの値を確認できます。入力したパターンとテキストはブラウザの中だけで処理され、外部には送信されません。

フラグ

入力したパターン・テキストはブラウザの中だけで処理され、どこにも送信されません。

結果

パターンとテスト文字列を入力すると、その場でマッチ結果が表示されます。

使い方

  1. 正規表現パターンとフラグ(g・i・m・s・uから必要なもの)を入力します。
  2. テスト対象の文字列を入力します。
  3. マッチ件数・ハイライト表示・キャプチャグループの値がその場で表示されます。

計算・変換の根拠

対応フラグ

  • g(グローバル): すべてのマッチを取得します。指定しない場合は最初の1件のみです。
  • i(大文字小文字を無視)
  • m(複数行): ^ $ が各行の先頭・末尾にもマッチします。
  • s(dotAll): . が改行文字にもマッチします。
  • u(Unicode): サロゲートペアや\u{...}記法をコードポイント単位で扱います。

マッチ結果について

各マッチについて、マッチした文字列・開始位置・長さに加えて、番号付きキャプチャグループ((...))と名前付きキャプチャグループ((?<name>...))の値と開始位置を表示します。グループがマッチしなかった場合は「(マッチせず)」と表示されます。

破滅的バックトラッキング(ReDoS)への対策と限界

JavaScriptの正規表現エンジンは、(a+)+ のように量指定子(+*)で囲まれたグループにさらに量指定子が続く「ネストした量指定子」を含むパターンに対して、特定の入力(マッチしない末尾の文字列など)を与えると、処理時間が入力長に対して指数的に増加し、ブラウザのタブが長時間応答しなくなることがあります(一般に破滅的バックトラッキング、ReDoSと呼ばれます)。

このツールは、パターンを実行する前に「ネストした量指定子」の典型的な形を検出し、該当する場合は実行せずにエラーとして表示します。ただし、この検出は代表的なパターン形のみを対象とした簡易的なものです。アルタネーション((a|aa)+ など)による組み合わせ爆発のように、検出できないパターンも理論上存在します。動作が重くなった、または応答がなくなった場合は、そのタブを閉じて再度開いてください。

大きな入力の扱い

パターンは1,000文字、テキストは20万文字までを上限としています。グローバルフラグでのマッチ件数は5,000件を上限とし、超過分は打ち切って「truncated」として扱います。

スコープ外の機能

置換(Substitution)、正規表現の自然言語での説明生成、他言語(Python・PHP等)の正規表現エンジンへの切り替えには対応していません。JavaScriptの正規表現エンジンでの挙動確認に特化しています。

よくある質問

入力したパターンやテキストはどこかに送信されますか?

送信されません。正規表現のマッチ処理はすべてお使いのブラウザの中だけで行われ、外部への通信は一切発生しません。

対応しているフラグは何ですか?

g(グローバル)・i(大文字小文字を無視)・m(複数行)・s(dotAll)・u(Unicode)の5つに対応しています。y(sticky)には対応していません。

特定のパターンを入力するとエラーになるのはなぜですか?

「ネストした量指定子」(例: (a+)+ のように、量指定子を含むグループにさらに量指定子が続く形)を含むパターンは、特定の入力でブラウザが長時間応答しなくなる「破滅的バックトラッキング」を引き起こす可能性があるため、実行前に検出してエラーとして表示しています。この検出は代表的なパターン形のみを対象とした簡易的なものであり、すべての危険なパターンを検出できるわけではありません。

マッチした文字列を置換する機能はありますか?

ありません。このツールはパターンの検証とマッチ箇所の確認に特化しており、置換機能は提供していません。

JavaScript以外の言語(Python・PHPなど)の正規表現でも同じ結果になりますか?

必ずしも同じにはなりません。このツールはJavaScriptの正規表現エンジンの挙動をそのまま反映しています。他の言語では構文や挙動が一部異なる場合があります(例: 名前付きグループの記法、後読み・先読みの対応状況など)。