Regex Tester — 正規表現をライブマッチングでテストする
正規表現をライブマッチングでテストします。マッチをハイライトし、capture group を表示し、パターンを解説 —— ブラウザで動作、アップロード不要。
正規表現は、これまでに発明された中で最も強力な文字列処理ツールであると同時に、あらゆるプログラミング言語で最も頻繁に書き間違えられるコードでもあります。テスト入力では意図通りにマッチするものの、本番環境では過剰マッチや不足マッチを起こす regex は、ビジュアルテスターなら数秒で発見できるバグであり、コードレビューでは決して気づかれないかもしれません。このテスターはコンテキスト内のすべてのマッチを表示します。ソーステキスト内でマッチした部分文字列がハイライトされ、capture group にラベルが付けられて抽出され、マッチしなかったテキストが明確に分離されるため、[a-z]+ と [a-z]+$ の違いがパターンが本番環境に届く前に明らかになります。
regex explainer は、このツールの最も特徴的な機能です。正規表現の構文は有名な「書くだけ」の言語です:書いたときには理解できていたパターンでも、6 か月後に修正が必要になったときには理解不能になることがよくあります。explainer はパターンを構成トークンに分解し、各トークンについて平易な英語での説明を記述します:quantifier、character class、anchor、group、alternation、lookaround。これにより、このツールは regex を書くのと同じくらい読むのにも役立ちます —— 同僚のプルリクエストからパターンを貼り付け、explain を押し、承認する前にそれが何をするかを理解できます。
flavour セレクターは、最も厄介な regex 相互運用性の問題に取り組みます。同じパターンでも、regex エンジンの実装が異なるため、言語が異なると異なるマッチを生成することがあります。JavaScript には possessive quantifier と lookbehind がありません(ES2018 より前)。Go の regexp パッケージは backreference を許可しません。Python の re モジュールは Unicode character class を JavaScript とは異なる方法で処理します。テスターでは flavour を切り替えて各エンジンがパターンをどう解釈するかを確認できるため、ローカル環境では動作するが CI では失敗するパターンをコミットする前に言語間の違いを表面化できます。
使い方
regex パターンを記述する
パターン入力欄に正規表現を入力します。flavour を選択します:JavaScript(ブラウザネイティブ)、PCRE、Python、または Go。テスターはマッチングが行われる前に入力中にインラインで構文エラーを表示します。
テスト用テキストを貼り付ける
マッチさせたいテキストをテキストパネルに貼り付けます。パターンまたはテキストを編集すると、マッチがリアルタイムでハイライトされます。各マッチは異なる背景色でレンダリングされ、重複するマッチは視覚的に区別されます。
capture group を検査する
任意のマッチをクリックすると、完全なマッチと各番号付き capture group がサイドパネルに表示されます。名前付き capture group にはその名前がラベル付けされます。ゼロ長マッチはマッチ位置に細いカーソルバーとして表示されます。
よくある質問
regex の flavour にはどのような違いがありますか?
JavaScript flavour はブラウザ内蔵の RegExp エンジン(ECMAScript 仕様、古いブラウザでは lookbehind 不可)を使用します。PCRE flavour は lookbehind アサーションと possessive quantifier を有効にします。Python flavour は `\A`/`\Z` アンカーを追加します。Go flavour は backreference と lookaround を許可しません。ターゲットのランタイムに合わせて flavour を選択してください。
explainer はどのように動作しますか?
regex explainer はパターンをトークンごとに分解し、各コンポーネントの平易な英語での説明を出力します。例えば `^\d{3}-\d{2}-\d{4}$` は「行頭、正確に 3 桁の数字、ハイフン、正確に 2 桁の数字、ハイフン、正確に 4 桁の数字、行末」となります。これは自分が書いたのではない regex を引き継いだときに最適なツールです。
パターンが期待と異なるマッチをするのはなぜですか?
よくある落とし穴:文字列先頭(^)や文字列末尾($)のアンカーが欠けていると部分マッチを許容します。quantifier はデフォルトで greedy です(`.*` は文字列全体を飲み込みます)。`[a-z]` のような character class はアクセント付き文字にマッチしません。テスターは完全なマッチ範囲とマッチしなかったテキストを表示するため、過剰マッチや不足マッチの診断に役立ちます。
テストケースを保存したり共有したりできますか?
パターンとテストテキストは URL fragment にエンコードされるため、ページをブックマークしたり URL を共有したりすれば現在の状態が保持されます。データが送信されることはありません —— エンコードは完全にクライアントサイドの URL fragment シリアライゼーションです。
Unicode property escape はサポートされていますか?
はい —— `\p{Letter}`、`\p{Number}`、`\p{Script=Greek}` などの Unicode property escape は JavaScript flavour(ES2018+)でサポートされています。テスターは選択した flavour に対して構文を検証し、サポートされていない escape にフラグを立てます。
制限事項
- flavour の精度はベストエフォートregex エンジンは、すべての flavour においてブラウザのネイティブ JavaScript RegExp です。言語間の backtracking の動作、Unicode の扱い、quantifier のエッジケースのセマンティクスの違いは flavour ノートに記載されていますが、エミュレートされません。
- catastrophic backtracking は防止されません指数関数的 backtracking を引き起こすパターンはブラウザタブをフリーズさせる可能性があります。テスターはネストした quantifier を持つパターン(例:`(a+)+b`)について警告しますが、実行を中断しません。疑わしいパターンをテストする前に作業を保存してください。
- 置換/substitution モードはありませんテスターはマッチと capture group を検証しますが、置換モードは提供しません。検索と置換のテストには、コードエディターの text-diff または string-replace 機能を使用してください。
プラットフォーム別の注意点
- macOS
- BBEdit と VS Code にはファイル検索用の regex テスターが内蔵されています。ブラウザツールはチャット、メール、API レスポンスからのアドホックなテキストに対する regex テストに適しています。
- Linux
- コマンドラインテストには `echo 'text' | grep -P 'pattern'` で PCRE regex をテストできます。ブラウザツールは capture group ビジュアライザーと多言語 flavour トグルを追加します。
- Web
- 完全にクライアントサイドで動作します。regex とテストテキストはデバイス上に留まります。