ECMAScript と標準一致の動作の比較

ECMAScript と標準正規表現の動作は、次の 3 つの点で異なります。

  • 照合式での文字クラスの指定方法が異なります。標準正規表現は、Unicode 文字カテゴリを既定でサポートします。ECMAScript は、Unicode をサポートしません。

  • 正規表現キャプチャ クラスが、それ自体への前方参照を持っている場合は、キャプチャの反復処理のたびに更新する必要があります。

  • 8 進数エスケープと前方参照のあいまいさの処理方法が異なります。

標準正規表現と ECMAScript 正規表現による 8 進数と前方参照の解釈の違いの概要を次の表に示します。

標準正規表現の動作 ECMAScript の動作

\ の次に 0、その次に 0 ~ 2 桁の 8 進数字が続いている場合は、8 進数として解釈されます。たとえば、 \044 は常に '$' です。

同じ動作です。

\ の次に 1 ~ 9 の数字が続き、その次に 10 進数字が続いていない場合は、前方参照として解釈されます。たとえば、キャプチャ 9 が存在しない場合でも、\9 は常に前方参照 9 です。キャプチャが存在しない場合、正規表現パーサーは構文例外をスローします。

単一の 10 進数字のキャプチャが存在する場合は、その数字への前方参照です。それ以外の場合は、リテラルとして解釈されます。

\ の次に 1 ~ 9 の数字が続き、その次にさらに 10 進数が続く場合、この数字は 10 進値として解釈されます。そのキャプチャが存在する場合は、その式は前方参照として解釈されます。

キャプチャが存在しない場合は、先行する数字が 377 までの範囲で 8 進数として解釈され (つまり、値の下位 8 ビットのみを考慮)、残りの数字はリテラルとして解釈されます。たとえば、式 \3000 の場合、キャプチャ 300 が存在する場合は前方参照 300 として解釈されます。キャプチャ 300 が存在しない場合は 8 進数 300 とそれに続く 0 として解釈されます。

\ の次に 1 ~ 9 の数字、その次にさらに 10 進数字が続く場合は、キャプチャを参照できる範囲で、できるだけ多くの桁数が 10 進値に変換され、前方参照として解釈されます。変換できる数字がない場合は、先行する数字が 377 までの範囲で 8 進数として解釈され、残りの数字はリテラルとして解釈されます。

参照

その他の技術情報

正規表現言語要素