正規表現移植性チェッカー
JavaScript形式の`/pattern/flags`または裸の正規表現を貼り付け、Pythonの`re`やPCRE系エンジン(PHP、Perl)で失敗または暗黙に動作が変わる箇所を確認します。
ブラウザー内でローカルに処理します。ファイルがアップロードされることはありません。
使い方 ツール
- 裸のパターン(`\d{4}-\d{2}`)または区切り付き(`/\d{4}-\d{2}/g`)で貼り付けます。内容はブラウザー外へ送信されません。
- 「パターンを確認」を選びます。
- 指摘された構文が他環境で構文エラーか、動作が黙って変わるか、一方向のみ互換なのか確認します。
- 安全な書き換えがあれば利用します。所有格量指定子、アトミックグループ、再帰など、単純に置換できない構文は推測せず説明します。
前提条件
- 正規表現エンジンではなく、パターン文字列の静的走査です。サンプル文字列に実行せず、完全な文法(文字クラス、入れ子グループ、個別規則対象外のエスケープ境界)も解析しません。
- 比較対象はJavaScript ECMAScript RegExp、Python `re`、PCRE系(PHP `preg_*`やPerl)の3系統です。
- 文書化された仕様レベルの差のみ指摘し、まれなエンジン固有差やバージョン固有バグは対象外です。
出典と参考データ
方法論
区切り`/pattern/flags`があれば本文を取り出し、言語間移植性を損ねる8種類の構文を対象を絞ったパターン照合で検出します:Python専用名前付きグループ/後方参照、所有格量指定子、アトミックグループ、\A/\Z/\zアンカー、PCRE再帰参照、パターン途中のインラインフラグ、\d/\w/\sのASCII/Unicode既定値。一般用途の正規表現パーサーではありません。機械的に安全で曖昧でない場合のみ書き換えを提示します。
計算例
\Aと\Zアンカー
入力項目: /\Afoo.*bar\Z/
結果: JavaScriptに\A/\Zアンカーはなく、\Aは文字A、\Zは文字Zとして黙って解釈されます。コンパイルエラーでなく全く異なる文字列に一致するためエラーとして指摘します。
Python式の名前付きグループ
入力項目: (?P<year>\d{4})
結果: `(?P<year>...)`はJavaScriptではSyntaxErrorです。JSはPのない`(?<year>...)`を要求します。Pを除く安全な書き換えを提案し、PCRE/.NETでも単純形式を受け付けます。
所有格量指定子とアトミックグループ
入力項目: (?>a++)b
結果: `(?>...)`アトミックグループと`a++`所有格量指定子はいずれもJavaScriptに同等の構文がありません。JSではキャプチャ付き先読みでパターン構造を変更する必要があるため、自動書き換えなしのエラーとします。
Python式の先頭アンカー
入力項目: /\Afoo/
結果: Pythonなどのエンジンは文字列絶対先頭に\Aを使います。JavaScriptにこのアンカーはなく、同一性エスケープとして文字Aに一致する場合があります。パターン文字列を検査するだけで、サンプル実行はしません。
実用的なアドバイス
- JavaScriptでも実行するパターンで\A、\Z/\zに頼らないでください。`^`/`$`を使い、mフラグを意図的に無効にし、末尾改行の必要な動作を確認します。
- JavaScriptとPythonの両方で使う場合、Pythonが要求しPCRE/.NETも受け入れる`(?P<name>...)`がより移植しやすい名前付きグループ形式です。JavaScriptの単純形式`(?<name>...)`とは異なります。
- 所有格量指定子、アトミックグループ、再帰パターンはJavaScriptでそのまま使えません。移植前にパターンを再構成するか、本格的なパーサーを検討してください。
よくある間違い
- JSでエラーなくコンパイルすればPython/PCRE版と同じ動作と思うこと。\A/\Zや\d/\w/\sのUnicode既定値はコンパイルできても一致内容が変わります。
- `(?<name>...)`は普遍的と思うこと。JS、PCRE、.NETでは有効ですがPython `re`はPがない形式を拒否します。
よくある質問
なぜ\A/\Zは所有格量指定子やアトミックグループより危険ですか?
所有格量指定子とアトミックグループはJavaScriptでSyntaxErrorとなるため、失敗がすぐ分かります。\A/\Zはコンパイルされてもアンカーでなく文字A/Zに黙って一致するため、実データで誤動作するまで気づかない場合があります。
JS用に`(?<name>...)`を提案し、Pythonには警告するのはなぜ?
適切な表記はエンジンによります。JS/PCRE/.NETはPなし、PythonはPありを要求します。対象を決められないため両方向を示し、貼り付けられたPython形式をJSが読む場合のように一方で明らかに無効なケースだけ強制書き換えします。
所有格量指定子やアトミックグループを自動修正できますか?
できません。JavaScriptで同等効果を得るには一般にキャプチャ付き先読み(`(?=(pattern))\1`)によるアトミックグループの模倣が必要で、文字置換でなく構造変更になります。パターン所有者が判断すべき内容です。
最終確認日: 2026-09-25
正規表現パーサーやエンジンではなく、8つの文書化済み移植性問題を構文単位で走査します。特殊なエンジン拡張、入れ子グループ境界、実際の一致動作は対象外で、入力テキストへパターンを実行しません。
テーマとツールの設定、保存済みリストと最近使用したリストは、このブラウザー内にのみ保存されます。