正規表現移植性チェッカー

JavaScript形式の`/pattern/flags`または裸の正規表現を貼り付け、Pythonの`re`やPCRE系エンジン(PHP、Perl)で失敗または暗黙に動作が変わる箇所を確認します。

ブラウザー内でローカルに処理します。ファイルがアップロードされることはありません。

使い方 ツール

  1. 裸のパターン(`\d{4}-\d{2}`)または区切り付き(`/\d{4}-\d{2}/g`)で貼り付けます。内容はブラウザー外へ送信されません。
  2. 「パターンを確認」を選びます。
  3. 指摘された構文が他環境で構文エラーか、動作が黙って変わるか、一方向のみ互換なのか確認します。
  4. 安全な書き換えがあれば利用します。所有格量指定子、アトミックグループ、再帰など、単純に置換できない構文は推測せず説明します。

前提条件

出典と参考データ

方法論

区切り`/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に一致する場合があります。パターン文字列を検査するだけで、サンプル実行はしません。

実用的なアドバイス
よくある間違い

よくある質問

なぜ\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つの文書化済み移植性問題を構文単位で走査します。特殊なエンジン拡張、入れ子グループ境界、実際の一致動作は対象外で、入力テキストへパターンを実行しません。

テーマとツールの設定、保存済みリストと最近使用したリストは、このブラウザー内にのみ保存されます。