MV Tools

実際の JavaScript 正規表現境界ケース実行

境界ケースと安全な置換で JavaScript 正規表現をテストする方法

JavaScript 正規表現をレビュー可能にする手順:意図をケースにし、エンジンとフラグを確認し、高コストなパターンを本番入力から遠ざけます。

MV Tools 編集チーム更新日 約 8 分で読めます

ツールを開く

パターンの前に一致を記述する

一致すべき例、一致しない例、境界、空、Unicode、ほぼ一致を列挙し、完全一致かグループかを示します。

アンカー、境界、空白、任意部分、エスケープは重要です。JSON、URL、日付、マークアップの完全な文法にはパーサーを使います。

アンカーと複数行フラグで、部分行を受け入れずに各行全体を確認します。
アンカーと複数行フラグで、部分行を受け入れずに各行全体を確認します。

同じエンジンと明示的なフラグで試す

このツールは JavaScript RegExp で g、i、m、s、u、y を使います。PCRE、Python、Java、.NET、DB、サーバーは異なる場合があります。

g は出現、m は ^/$、s はドット、u は Unicode、y は正確な位置に影響します。

アンカーと複数行フラグで、部分行を受け入れずに各行全体を確認します。
アンカーと複数行フラグで、部分行を受け入れずに各行全体を確認します。

グループと置換を一緒に確認する

番号・名前付きグループを、存在する例と任意で不在の例で確認します。

$&、$1、$<name> を試します。置換入力時は g がなくてもグローバル置換です。

ほぼ一致と長すぎる行は置換出力でも変わりません。
ほぼ一致と長すぎる行は置換出力でも変わりません。

性能リスクを避ける

`(a+)+` や `(.*)*` のような曖昧なネスト反復は、長いほぼ一致で非常に遅くなります。

500 KB、1,000件の上限はありますが、別プロセスへの分離も実行時間の上限もありません。短い敵対的ケースを使い、サーバー側にも保護を設けます。

ほぼ一致と長すぎる行は置換出力でも変わりません。
ほぼ一致と長すぎる行は置換出力でも変わりません。

繰り返せるケースを残す

パターン、フラグ、例、期待値をコードの近くに残し、最終実行環境で自動テスト化します。

処理はローカルですが、ログ、トークン、メール、署名付き URL は機密です。

アンカーと複数行フラグで、部分行を受け入れずに各行全体を確認します。
アンカーと複数行フラグで、部分行を受け入れずに各行全体を確認します。

よくある質問

なぜサーバーで失敗しますか?

別のエンジンを使う可能性があります。

g は置換を変えますか?

プレビューはグローバルに置換します。

500 KB は遅い regex を防ぎますか?

いいえ、実行時間の上限はありません。