ECMAScript と標準一致の動作の比較
ECMAScript と標準正規表現の動作は、次の 3 つの点で異なります。
照合式での文字クラスの指定方法が異なります。標準正規表現は、Unicode 文字カテゴリを既定でサポートします。ECMAScript は、Unicode をサポートしません。
正規表現キャプチャ クラスが、それ自体への前方参照を持っている場合は、キャプチャの反復処理のたびに更新する必要があります。
8 進数エスケープと前方参照のあいまいさの処理方法が異なります。
標準正規表現と ECMAScript 正規表現による 8 進数と前方参照の解釈の違いの概要を次の表に示します。
標準正規表現の動作 | ECMAScript の動作 |
---|---|
\ の次に 0、その次に 0 ~ 2 桁の 8 進数字が続いている場合は、8 進数として解釈されます。たとえば、 |
同じ動作です。 |
\ の次に 1 ~ 9 の数字が続き、その次に 10 進数字が続いていない場合は、前方参照として解釈されます。たとえば、キャプチャ 9 が存在しない場合でも、 |
単一の 10 進数字のキャプチャが存在する場合は、その数字への前方参照です。それ以外の場合は、リテラルとして解釈されます。 |
\ の次に 1 ~ 9 の数字が続き、その次にさらに 10 進数が続く場合、この数字は 10 進値として解釈されます。そのキャプチャが存在する場合は、その式は前方参照として解釈されます。 キャプチャが存在しない場合は、先行する数字が 377 までの範囲で 8 進数として解釈され (つまり、値の下位 8 ビットのみを考慮)、残りの数字はリテラルとして解釈されます。たとえば、式 |
\ の次に 1 ~ 9 の数字、その次にさらに 10 進数字が続く場合は、キャプチャを参照できる範囲で、できるだけ多くの桁数が 10 進値に変換され、前方参照として解釈されます。変換できる数字がない場合は、先行する数字が 377 までの範囲で 8 進数として解釈され、残りの数字はリテラルとして解釈されます。 |