本頁の目次 目次 次頁: 15-11_Error_Objects 前頁: 15-9_Date_Objects
RegExp オブジェクトは、正規表現と関連するフラグで構成される。
NOTE 正規表現の書式と機能は、 Perl5 プログラミング言語の正規表現を模して作られる。
RegExp コンストラクタは、入力パターン文字列に下記の文法を適用する。文法が文字列を Pattern の 展開として解釈できなければ、エラーが発生する。
正規表現パターンは、下に述べる処理を用いる内部関数に変換される。実装は、同じ結果を得られるならば、下に述べるものよりもより効率のいいアルゴリズムの仕様が推奨される。
以下の説明では、次の変数を用いる:
さらに、以下の説明では、次の内部データ構造を用いる:
boolean
を返す。 assertion テスターは、入力文字列の現在の位置に対する特殊条件 (クロージャの結合済み引数で特定される) をテストし、条件にマッチすれば true 、マッチしなければ false を返す。生成規則 Pattern :: Disjunction は、次のように評価される:
参考情報解説 (Informative comment): Pattern は内部関数値に評価 ("コンパイル") される。 RegExp.prototype.exec がこの関数を適用できるのは、文字列と、文字列内部のオフセットで、それは文字列内部のその厳密なオフセットで開始してパターンがマッチできるかどうかを決定するものである。 そして、マッチするならば、それは捕捉括弧の値となるものである。 セクション 15.10.2 のアルゴリズムは、コンパイルするパターンが例外 SyntaxError を投げてもよいように設計される; 一方、パターンが一旦コンパイルされると、文字列内のマッチを検索する結果の関数の適用は、例外を投げることが出来ない (out-of-memory など、どこでも発生しうる任意のホスト定義の例外を除く)。
生成規則 Disjunction :: Alternative の評価は、 Alternative を評価して取得した Matcher を返す。
生成規則 Disjunction :: Alternative | Disjunction は、次のように評価される:
参考情報解説: 正規表現演算子 | は 2 個の代替を区切る。パターンはまず左の Alternative (後に正規表現が続く) のマッチを試行する; 失敗したならば、右の Disjunction (後に正規表現が続く) のマッチを試行する。左の Alternative, 右の Disjunction, 続き全てが選択点を持つならば、続きの全ての選択肢は左の Alternative 内の次の選択肢上への移動前に試行される。左の Alternative 内の選択肢を使い切ったならば、右の Disjunction が左の Alternative の代わりに試行される。 | によりスキップされたパターン成分内部の任意の捕捉括弧は、文字列の代わりに undefined 値を生成する。つまり、例えば
/a|ab/.exec("abc")
は結果 "a" を返し、 "ab" は返さない。もっと言えば
/((a)|(ab))((c)|(bc))/.exec("abc")
は以下の配列
["abc", "a", "a", undefined, "bc", undefined, "bc"]
を返し、
["abc", "ab", undefined, "ab", "c", "c", undefined]
は返さない。
生成規則 Alternative :: [empty] の評価は、Matcher を返す。この Matcher は 2 個の引数 State x と Continuation c をとり、 c(x) の結果を返す。
生成規則 Alternative :: Alternative Term は、次のように評価される:
参考情報解説: 連続する Term は、入力文字列の連続する部分の同時マッチを試みる。 左の Alternative, 右の Term, 続きの正規表現の全てが選択ポイントを持つならば、 結果の全選択肢が右の Term の次の選択肢に移動する前に検査され、 右の Term の全ての選択肢が左の Alternative の次の選択肢に移動する前に検査される。
生成規則 Term :: Assertion の評価は 2 個の引数 State x と a Continuation c を取る内部 Matcher クロージャ を返す。このクロージャは次を実行する:
boolean
値を r とする。生成規則 Term :: Atom の評価は、 Atom を評価して Matcher を取得し、その Matcher を返す。
生成規則 Term :: Atom Quantifier は、次のように評価される:
boolean
値 greedy を取得する。内部補助関数 RepeatMatcher は 8 個のパラメタ: Matcher m, 整数 min, 整数 (or ∞) max, boolean
値 greedy, State x, Continuation c, 整数 parenIndex, 整数 parenCount, を取る。そして次のように振舞う:
参考情報解説: Quantifier の続く Atom は、 Quantifier で指定された回数だけ繰り返される。量指定子は貪欲でなくすることもできる。その場合、更なる後続のマッチを行ううえで Atom パターンの繰返し回数は可能な限り少ない。また貪欲にすることもできる。その場合、 Atom パターンは後続のマッチに可能な限り多くの回数繰り返される。マッチを行う入力文字列よりもむしろ Atom パターンが繰り返され、したがって Atom の異なる反復は、異なる入力部分文字列とマッチできる。
Atom と続きの正規表現がすべて選択点を持つ場合、 Atom はまず可能な限り多く(最短マッチでは少なく) のマッチを行う。続きの全選択肢は、最後の Atom 反復中での次の選択肢上に移動する前に、試行される。最後 (n 番目) の Atom 反復の全選択肢は、最後から一つ前 (n-1 番目) の Atom 反復中での次の選択肢上に移動する前に、試行される; その時点で、より多くの、またはより少ない Atom の反復が今度は可能であることが判明するかもしれない; (n-1) 番目の Atom の反復の中の次の選択肢上に移動する前に、(可能な限り少なく、または可能な限り多くのいずれかで再開し)、使い尽くされる。
/a[a-z]{2,4}/.exec("abcdefghi")
が "abcde" を返すことに較べて、
/a[a-z]{2,4}?/.exec("abcdefghi")
は "abc" を返す。
また、
/(aa|aabaac|ba|b|c)*/.exec("aabaac")
上の順の選択点による正規表現は
["aaba", "ba"]
という配列を返し、
["aabaac", "aabaac"] ["aabaac", "c"]
とはならない。
上記の選択点の順序は、2 数の最大公約数(単項表記で表す)を算出する正規表現の記述にも使用できる。次の例は、10 と 15 の最大公約数を算出する:
"aaaaaaaaaa,aaaaaaaaaaaaaaa".replace(/^(a+)\1*,\1+$/,"$1")
これは単項表記の最大公約数 "aaaaa" を返す。
ステップ 4 の RepeatMatcher は、 Atom が繰り返されるたびに Atom の captures をクリアする。 これは次の正規表現の振る舞いに見ることができる:
/(z)((a+)?(b+)?(c))*/.exec("zaacbbbcac")
これは次の配列を返し:
["zaacbbbcac", "z", "ac", "a", undefined, "c"]
次のようなものではない。
["zaacbbbcac", "z", "ac", "a", "bbb", "c"]
最も外側の * の各反復が、この場合 2 番目, 3 番目, 4 番目である捕捉文字列を含む、数量化された Atom に含まれていた全ての捕捉された文字列をクリアするためである。
ステップ 1 の RepeatMatcher のクロージャ d は、一旦最小反復数が満たされたらそれ以上空文字列にマッチする Atom の展開を更に反復するために考えないことを宣言する。これは正規表現エンジンがパターンの無限ループに陥ることを防いでおり、次のような正規表現は:
/(a*)*/.exec("b")
また若干複雑には次のようなものは:
/(a*)b\1+/.exec("baaaac")
これらは次の配列を返す:
["b", ""]
生成規則 Assertion :: ^ の評価は、内部 AssertionTester クロージャを返す。これは引数に State x を取り、次を実行する:
生成規則 Assertion :: $ の評価は、内部 AssertionTester クロージャを返す。これは引数に State x を取り、次を実行する:
生成規則 Assertion :: \ b の評価は、内部 AssertionTester クロージャを返す。これは引数に State x を取り、次を実行する:
boolean
値を a とする。boolean
値を b とする。生成規則 Assertion :: \ B の評価は、内部 AssertionTester クロージャを返す。これは引数に State x を取り、次を実行する:
boolean
値を a とする。boolean
値を b とする。内部補助関数 IsWordChar は整数パラメータ e をとり、次を実行する:
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 _
生成規則 Quantifier :: QuantifierPrefix は、次のように評価される:
生成規則 Quantifier :: QuantifierPrefix ? は、次のように評価される:
生成規則 QuantifierPrefix :: * の評価は、 2 個の結果 0 と ∞ を返す。
生成規則 QuantifierPrefix :: + の評価は、 2 個の結果 1 と ∞ を返す。
生成規則 QuantifierPrefix :: ? の評価は、 2 個の結果 0 と 1 を返す。
生成規則 QuantifierPrefix :: { DecimalDigits } は、次のように評価される:
生成規則 QuantifierPrefix :: { DecimalDigits , } は、次のように評価される:
生成規則 QuantifierPrefix :: { DecimalDigits , DecimalDigits } は、次のように評価される:
生成規則 Atom :: PatternCharacter は、次のように評価される:
生成規則 Atom :: . は、次のように評価される:
生成規則 Atom :: \ AtomEscape の評価は、 AtomEscape を評価して Matcher を取得し、その Matcher を返す。
生成規則 Atom :: CharacterClass は、次のように評価される:
boolean
値 invert を取得する。生成規則 Atom :: ( Disjunction ) は、次のように評価される:
生成規則 Atom :: ( ? : Disjunction ) の評価は、 Disjunction を評価して Matcher を取得し、その Matcher を返す。
生成規則 Atom :: ( ? = Disjunction ) は、次のように評価される:
生成規則 Atom :: ( ? ! Disjunction ) は、次のように評価される:
内部補助関数 CharacterSetMatcher は 2 個の引数 CharSet A と boolean
フラグ invert をとり、次のように振舞う:
内部補助関数 Canonicalize はパラメタに文字 ch をとり、次のように振舞う:
参考情報解説: ( Disjunction ) 形式の括弧は、 Disjunction パターンのグループ成分とともに、マッチ結果の保存を提示する。結果は後方参照 (\ に 0 以外の10進数が続くもの)、置換文字列内での参照に用いられ、また正規表現マッチ関数から配列の一部を返される。括弧の捕捉の振る舞いの抑制には、代わりに (?: Disjunction ) 形式を用いる。
(?= Disjunction ) 形式は、 0 文字幅の肯定の先読みを指定する。成功するためには Disjunction 内部のパターンは現在位置においてマッチしなければならないが、後続のマッチングの前に現在位置は前進しない。 Disjunction が現在位置におけるマッチに何通りかある場合は、最初のものだけが検査される。他の正規表現演算子とは異なり、 (?= 形式内への後方参照は存在しない (この独特の振る舞いは Perl から継承される)。 Disjunction が捕捉括弧とその捕捉への後方参照を含む後続のパターンで構成されるとき、このことが重要になる。
例えば、
/(?=(a+))/.exec("baaabac")
は、 1 個目の b の直後の空文字列にマッチし、それゆえ次の配列を返す:
["", "aaa"]
先読みへ後方参照の不足の例として、次を考えてみる:
/(?=(a+))a*b\1/.exec("baaabac")
この式が返すのは次であり:
["aba", "a"]
次のようにはならない:
["aaaba", "a"]
(?= Disjunction ) 形式は、 0 文字幅の否定の先読みを指定する。成功するためには Disjunction 内部のパターンは現在位置においてマッチに失敗しなければならない。現在位置は後続のマッチングの前に前進しない。 Disjunction には捕捉括弧を含められるが、それらへの後方参照は Disjunction 自身内部からの場合ものみ意味を持つ。パターン内の他の場所からのこれらの捕捉括弧への後方参照は、パターンに否定の先読みが成功してはならないため、常に undefined を返す。例えば:
/(.*?)a(?!(a+)b\2c)\2(.*)/.exec("baaabaac")
は、ある正の数 n 個の a
, 1 個の b
, 他の n 個の (1 個目の \2
で指定される) a
, 1 個の c
, が直後に続かないような 1 個の a
を検索する。 2 個目の \2
は否定の先読みの外部であり、したがって undefined に対してマッチするので常に成功する。式全体は次の配列を返す:
["baaabaac", "ba", undefined, "abaac"]
文字ケースを区別しないマッチでは、全ての文字は比較の直前に暗黙に大文字に変換される。しかし、大文字への変換が 1 個以上の文字に展開される場合("ß" (\u00DF
) から "SS
" に変換など)は、代わりに文字はそのまま残される。 ASCII 文字でなくても、大文字への変換がその文字を ASCII 文字にする場合、その文字は残される。これは /[a-z]/i のような ASCII 文字のマッチのみを意図した正規表現のマッチから、\u0131 \u017F のような Unicode 文字を遮る。なお、これらの変換が許可される場合、 /[^\W]/i は a, b, ..., h, にはマッチするが i や s にはマッチしない。
生成規則 AtomEscape :: DecimalEscape は、次のように評価される:
生成規則 AtomEscape :: CharacterEscape は、次のように評価される:
生成規則 AtomEscape :: CharacterClassEscape は、次のように評価される:
参考情報解説: \ に 0 以外の10進数 n の続く形式のエスケープシーケンスは、捕捉括弧の n 番目の集合 (セクション 15.10.2.11) の結果にマッチする。正規表現中の捕捉括弧が n 個未満である場合はエラーである。正規表現が n 個以上の捕捉括弧を持つが n 番目が何も捕捉されず undefined である場合、その後方参照は常に成功する。
生成規則 CharacterEscape :: ControlEscape の評価は、下の表に従って文字を返す:
ControlEscape | Unicode Value | Name | Symbol |
t | \u0009 | horizontal tab | <HT> |
n | \u000A | line feed (new line) | <LF> |
v | \u000B | vertical tab | <VT> |
f | \u000C | form feed | <FF> |
r | \u000D | carriage return |
<CR> |
生成規則 CharacterEscape :: c ControlLetter は、次のように評価される:
生成規則 CharacterEscape :: HexEscapeSequence の評価は、 HexEscapeSequence の文字値 (セクション 7.8.4) を評価して、結果の文字を返す。
生成規則 CharacterEscape :: UnicodeEscapeSequence の評価は、 UnicodeEscapeSequence の文字値 (セクション 7.8.4) を評価して、結果の文字を返す。
生成規則 CharacterEscape :: IdentityEscape の評価は、 IdentityEscape で表される文字を返す。
生成規則 DecimalEscape :: DecimalIntegerLiteral [lookahead ∉ DecimalDigit] は、次のように評価される。
"DecimalIntegerLiteral の数学値" の定義はセクション 7.8.3 である。
参考情報解説: 最初の数字が0以外である10進数 n が \ に続く場合、そのエスケープシーケンスは後方参照として考える。正規表現全体の左捕捉括弧の総数よりも n が大きい場合はエラーである。 \0 は NUL 文字を表し、10進数字を後に続けることはできない。
生成規則 CharacterClassEscape :: d の評価は、0 から 9 までを含む文字の 10 個の要素集合を返す。
生成規則 CharacterClassEscape :: D の評価は、 CharacterClassEscape :: d が返す集合を除く全ての文字の集合を返す。
生成規則 CharacterClassEscape :: s の評価は、 WhiteSpace (セクション 7.2) または LineTerminator (セクション 7.3) 生成規則の右辺上の文字を含む文字集合を返す。
生成規則 CharacterClassEscape :: S の評価は、 CharacterClassEscape :: s が返す集合を除く全ての文字集合を返す。
生成規則 CharacterClassEscape :: w の評価は、 63 個の文字を含む文字の集合を返す:
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _
生成規則 CharacterClassEscape :: W の評価は、 CharacterClassEscape :: w が返す集合を除く全ての文字集合を返す。
生成規則 CharacterClass :: [ [lookahead ∉ {^}] ClassRanges ] の評価は、 ClassRanges を評価して CharSet を取得し、その CharSet とブーリアン値 false を返す。
生成規則 CharacterClass :: [ ^ ClassRanges ] の評価は、 ClassRanges を評価して CharSet を取得し、その CharSet とブーリアン値 true を返す。
生成規則 ClassRanges :: [empty] の評価は、空の CharSet を返す。
生成規則 ClassRanges :: NonemptyClassRanges の評価は、 NonemptyClassRanges を評価して CharSet を取得し、その CharSet を返す。
生成規則 NonemptyClassRanges :: ClassAtom の評価は、 ClassAtom を評価して CharSet を取得し、その CharSet を返す。
生成規則 NonemptyClassRanges :: ClassAtom NonemptyClassRangesNoDash は、次のように評価される:
生成規則 NonemptyClassRanges :: ClassAtom - ClassAtom ClassRanges は、次のように評価される:
内部補助関数 CharacterRange は、 2 個の CharSet パラメータ A と B をとり、次を実行する:
生成規則 NonemptyClassRangesNoDash :: ClassAtom 評価は、 ClassAtom 評価で CharSet を取得し、その CharSet を返す。
生成規則 NonemptyClassRangesNoDash :: ClassAtomNoDash NonemptyClassRangesNoDash は、次のように評価される::
生成規則 NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassRanges は、次のように評価される::
参考情報解説: ClassRanges は、単一の ClassAtom そして/または ダッシュで区切られた 2 個の ClassAtom の範囲に展開してよい。文字ケースについては、 ClassRanges は 1 つ目の ClassAtom と 2 つ目の ClassAtom までの間の全ての文字を含む。 ClassAtom が単一の文字を表さない (例えば、一方が \w) ならば、また 1 つ目の ClassAtom のコードポイント値が 2 つ目の ClassAtom のコードポイント値より大きいならば、エラーが発生する。
パターンが文字ケースを区別しないとしても、範囲の両端の文字ケースは、文字の範囲への所属判定において重要である。たとえば、パターン /[E-F]/i は文字 E, F, e, f にのみマッチするのに対して、パターン /[E-f]/i は大文字小文字含めた ASCII 文字だけでなく記号 [, \, ], ^, _, ` にもマッチする。
文字 - は文字通りに扱われうるか、範囲を示せるかである。 - が文字通りに扱われるのは、それが ClassRanges の最初または最後の文字である場合、範囲指定の先頭または末尾である場合、直後に範囲指定が続く場合である。
生成規則 ClassAtom :: - の評価は、 1 個の文字 - で構成される CharSet を返す。
生成規則 ClassAtom :: ClassAtomNoDash の評価は、 ClassAtomNoDash 評価で CharSet を取得し、その CharSet を返す。
生成規則 ClassAtomNoDash :: SourceCharacter but not one of \ ] - の評価は、 SourceCharacter で表される文字で構成される 1 要素の CharSet を返す。
生成規則 ClassAtomNoDash :: \ ClassEscape の評価は、 ClassEscape 評価で CharSet を取得し、その CharSet を返す。
生成規則 ClassEscape :: DecimalEscape は、次のように評価される:
生成規則 ClassEscape :: b は、 1 個の文字 <BS> (Unicode 値 0008) で構成される CharSetを返して評価される。
生成規則 ClassEscape :: CharacterEscape の評価は、 CharacterEscape 評価で文字を取得し、その文字で構成される 1 要素の CharSet を返す。
生成規則 ClassEscape :: CharacterClassEscape の評価は、 CharacterClassEscape 評価で CharSet を取得し、その CharSet を返す。
参考情報解説: ClassAtom は、 \b, \B, 後方参照を除く残りの正規表現で許される任意のエスケープシーケンスを使用できる。 CharacterClass 内部において、 \b は後退文字 (backspace character) を意味し、一方 \B と後方参照はエラーを発生させる。 ClassAtom 内部での後方参照の使用はエラーを引き起こす。
pattern が [[Class]] プロパティが "RegExp" であるオブジェクト R で、かつ flags が undefined ならば、 R をそのまま返す。そうでなければ RegExp コンストラクタ (セクション 15.10.4.1) を呼出し、それに引数 pattern と flags を渡し、そのコンストラクタに構築されるオブジェクトを返す。
RegExp が new
式の一部として呼出されるとき、それはコンストラクタである: それは、新たに生成されるオブジェクトを初期化する。
pattern が [[Class]] プロパティが "RegExp" である オブジェクト R で、かつ flags が undefined ならば、 P を R の構築に用いる pattern とし、 F を R の構築に用いる flags とする。 pattern が [[Class]] プロパティが "RegExp" である オブジェクト R で、かつ flags が undefined でないならば、 例外 TypeError を投げる。 そうでなければ、 P を pattern が undefined ならば空文字列、そうでなければ ToString(pattern) とし、 F を flags が undefined ならば空文字列、そうでなければ ToString(flags) とする。
新規に構築されたオブジェクトの global プロパティは、 F が文字 "g" を含めば true, そうでなければ false である Boolean 値に設定される。
新規に構築されたオブジェクトの ignoreCase プロパティは、 F が文字 "i" を含めば true, そうでなければ false である Boolean 値に設定される。
新規に構築されたオブジェクトの multiline プロパティは、 F が文字 "m" を含めば true, そうでなければ false である Boolean 値に設定される。
F が "g", "i", "m" 以外の文字を含むならば、また一旦出現したものと同じものを含むならば、例外 SyntaxError を投げる。
P の文字が書式 Pattern を持たないならば、例外 SyntaxError を投げる。そうでなければ、新規に構築されたオブジェクトに Pattern の評価 ("compiling") により得られる [[Match]] プロパティを持たせる。 Pattern の評価が例外 SyntaxError を投げてもよいことに注意。 (Note: pattern が StringLiteral ならば、 文字列が RegExp によって処理される前に、通常のエスケープシーケンスの変換が実行される。 RegExp によって認識されるエスケープシーケンスを pattern に含めなければならないならば、 StringLiteral の内容の形成時に削除されることを防ぐために、 StringLiteral 内の文字 "\" はエスケープされなければならない。)
新規に構築されたオブジェクトの source プロパティは、 P に基づくPattern の書式の実装依存の文字列値に設定される。
新規に構築されたオブジェクトの lastIndex プロパティは、 0 に設定される。
新規に構築されたオブジェクトの [[Prototype]] プロパティは、 RegExp.prototype の初期値であるオリジナルの RegExp プロトタイプオブジェクトに設定される。
新規に構築されたオブジェクトの [[Class]] プロパティは、 "RegExp" に設定される
RegExp コンストラクタのの内部 [[Prototype]] プロパティの値は、 Function プロトタイプオブジェクト (セクション 15.3.4) である。
内部プロパティと length プロパティ (値は 2) の他に、 RegExp コンストラクタは次のプロパティを持つ:
RegExp.prototype の初期値は RegExp プロトタイプオブジェクト (セクション 15.10.6) である。
このプロパティは属性 { DontEnum, DontDelete, ReadOnly } を持つべきである。
RegExp プロトタイプオブジェクトの内部 [[Prototype]] プロパティの値は、 Object プロトタイプである。 RegExp プロトタイプオブジェクトの内部 [[Class]] プロパティの値は、 "Object" である。
RegExp プロトタイプオブジェクトは、独自の valueOf プロパティを持たない; しかしながら、 valueOf プロパティを Object プロトタイプオブジェクトから継承する。
RegExp プロトタイプオブジェクトのプロパティである関数の以下の説明において、フレーズ "この RegExp オブジェクト" は、関数呼出しの this
値であるオブジェクトを参照する; this
値 が内部 [[Class]] プロパティが "RegExp" のオブジェクトでない場合は、例外 TypeError が投げられる。
RegExp.prototype.constructor の初期値は、組込み RegExp コンストラクタである。
正規表現に対して string の正規表現マッチを行い、マッチの結果を含む Array オブジェクト、また文字列にマッチしなかった場合は null を返す。
文字列 ToString(string) は、次のように正規表現パターンの発生を検索される:
式 RegExp.prototype.exec(string) != null と同様である。
src を現在の正規表現を表す Pattern の書式の文字列とする。 src は、 source プロパティまた RegExp コンストラクタに供給されるソースコードと同一であってもなくてもよい; ただ、 src が現在の正規表現の flags を伴って RegExp コンストラクタに供給されたならば、結果の正規表現は、現在の正規表現と同様に振るまわなければならない。
toString は、文字列 "/", src, "/" の連結で形成される文字列を返す; global プロパティが true ならば "g"、 ignoreCase プロパティが true ならば "i"、 multiline プロパティが true ならば "m" を、連結する文字列に追加する。
NOTE 実装は、 src 内の特殊文字をエスケープするために、 RegExp コンストラクタへ渡されるソースと異なることを許可されている src の利用を選択してよい。例えば、 new
RegExp("/") から得られる正規表現において、 src は、数ある可能性の中から、 "/" または "\/" でありえる。後者は、書式 RegularExpressionLiteral を持つ toString 呼出しの完全な結果 ("/\//") を許可する。
RegExp インスタンスは、上記に指定されるその [[Prototype]] オブジェクトからプロパティを継承し、また次のプロパティを持つ。
source プロパティの値は、 現在の正規表現をあらわす Pattern の書式の文字列値である。このプロパティは、属性 { DontDelete, ReadOnly, DontEnum } を持つべきである。
global プロパティの値は、 flags が文字 "g" を含むかどうかを示す Boolean 値である。このプロパティは、属性 { DontDelete, ReadOnly, DontEnum } を持つべきである。
ignoreCase プロパティの値は、 flags が文字 "i" を含むかどうかを示す Boolean 値である。このプロパティは、属性 { DontDelete, ReadOnly, DontEnum } を持つべきである。
multiline プロパティの値は、 flags が文字 "m" を含むかどうかを示す Boolean 値である。このプロパティは、属性 { DontDelete, ReadOnly, DontEnum } を持つべきである。
lastIndex プロパティの値は、文字列の次のマッチを開始する位置を特定する整数である。このプロパティは、属性 { DontDelete, DontEnum } を持つべきである。