訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
RegExp が、 new 式の一部として呼ばれる場合、それは、コンストラクタであり、新たに生成したオブジェクトを初期化します。
pattern が、内部プロパティ[[Class]]が "RegExp"、フラグが、undefinedであるオブジェクト R である場合、P は、Rを構築する為に使用したpatternとし、F は、 R を構築する為に使用したフラグとします。 pattern が、内部プロパティ[[Class]]が "RegExp"、フラグが、undefinedでないオブジェクト R である場合、TypeError例外を投げ(スローし)ます。 それ以外の場合、 pattern が、 undefined である場合、 P は、カラの文字列とし、それ以外の場合、フラグがundefinedで且つ、 ToString(flags) 以外の場合、 F はカラの文字列とします。 P を構成する文字が、Pattern から成る構文を持たない場合、SyntaxError例外を投げ(スローし)ます。 それ以外の場合、新たに構築したオブジェクトは、15.10.2 で説明したように同じ Pattern である P を構成する文字("compiling")を評価することによって得られた内部プロパティ[[Match]]を持つものとします。 F が、 "g", "i", "m" 以外の文字を含んだり、1つ以上の同一文字を含む場合、SyntaxError例外を投げ(スローし)ます。 SyntaxError例外を投げ(スローし)ない場合、
S は、以下で説明したようにエスケープ(符号化)される特定の文字内にある P と同等の任意の Pattern の書式にある文字列とします。 S は、 P や pattern と同一であったり、そうでなかったりする場合がありますが、しかしながら、任意の Pattern として S を評価することによって得られる結果である内部プロシージャは、構築したオブジェクトの内部プロパティ[[Match]]によって与えられる内部プロシージャと同一の動作をしなければいけません。 pattern 内に現れる文字 / (スラッシュ)は、構築した正規表現と同一の動作をする RegularExpressionLiteral として(適切な語彙的内容内で)解析されることが可能な文字列 "/", S, "/", F を連結することによって形成されるString値として確保する為に必要となる S 内でエスケープされるようにしましょう。 例えば、 P が、 "/" である場合、 F が続く /// は、 RegularExpressionLiteral ではなく、SingleLineComment として解析される可能性があるので S は、他の可能性の中でも"/"ではなく "\/" や "\u002F" とすべきです。 P が、カラの文字列である場合、この仕様は、 S が、"(?:)" であるものとすることによって満たされます。
新たに構築したオブジェクトの次のプロパティは、 15.10.7 で指定される属性を伴うデータプロパティです。 各プロパティの[[Value]]は、次のように設定されます。
新たに構築したオブジェクトの source プロパティは、 S に設定されます。 新たに構築したオブジェクトの global プロパティは、 F が、文字 "g" と false以外を含む場合、trueであるBoolean値に設定されます。 新たに構築したオブジェクトのignoreCaseプロパティは、 F が、文字 "i" と false以外を含む場合、trueであるBoolean値に設定されます。 新たに構築したオブジェクトの multiline プロパティは、 F が、文字 "m" と false以外を含む場合、trueであるBoolean値に設定されます。 新たに構築したオブジェクトの lastIndex プロパティは、 0に設定されます。 新たに構築したオブジェクトの内部プロパティ[[Prototype]]は、 15.10.6 で指定したように標準組み込み RegExp プロトタイプオブジェクトに設定されます。 新たに構築したオブジェクトの内部プロパティ[[Class]]は、 "RegExp" に設定されます。
[注釈] pattern が、StringLiteral である場合、通常、エスケープシーケンスの置換は、文字列が、 RegExp によって処理される前に実行されます。 pattern が、 RegExp によって認識される為にエスケープシーケンスを含む場合、バックスラッシュである \ 文字は、 StringLiteral の内容が、形成される際に削除されることを防ぐために StringLiteral 内でエスケープされなければいけません。