22 テキスト処理

22.1 Stringオブジェクト

22.1.1 Stringコンストラクター

Stringコンストラクターは以下の通りです:

  • %String%である。
  • グローバルオブジェクト"String"プロパティの初期値である。
  • コンストラクターとして呼び出されたとき、新しいStringオブジェクトを作成して初期化する。
  • コンストラクターとしてではなく関数として呼び出されたとき、型変換を実行する。
  • クラス定義のextends節の値として使用できる。指定されたStringの動作を継承することを意図するサブクラスコンストラクターは、[[StringData]]内部スロットを持つサブクラスインスタンスを作成して初期化するために、Stringコンストラクターへのsuper呼び出しを含めなければならない。

22.1.1.1 String ( value )

この関数は呼び出されたとき、次の手順を実行します:

  1. value が存在しない場合、次を行う:
    1. str を空のStringとする。
  2. それ以外の場合、
    1. NewTarget が undefined であり、かつ value がSymbolである場合、SymbolDescriptiveString(value) を返す。
    2. str を ? ToString(value) とする。
  3. NewTarget が undefined の場合、str を返す。
  4. StringCreate(str, ? GetPrototypeFromConstructor(NewTarget, "%String.prototype%")) を返す。

22.1.2 Stringコンストラクターのプロパティ

Stringコンストラクターは以下の通りです:

  • [[Prototype]]内部スロットを持ち、その値は %Function.prototype% である。
  • 以下のプロパティを持つ:

22.1.2.1 String.fromCharCode ( ...codeUnits )

この関数は、restパラメーター codeUnits を形成する任意個数の引数で呼び出すことができます。

呼び出されたとき、次の手順を実行します:

  1. result を空のStringとする。
  2. codeUnits の各要素 next について、次を行う:
    1. nextCU を、数値が (? ToUint16(next)) であるコード単位とする。
    2. resultresultnextCU の文字列連結に設定する。
  3. result を返す。

この関数の"length"プロパティは 1𝔽 です。

22.1.2.2 String.fromCodePoint ( ...codePoints )

この関数は、restパラメーター codePoints を形成する任意個数の引数で呼び出すことができます。

呼び出されたとき、次の手順を実行します:

  1. result を空のStringとする。
  2. codePoints の各要素 next について、次を行う:
    1. nextCP を ? ToNumber(next) とする。
    2. nextCP が整数Numberでない場合、RangeError 例外をスローする。
    3. (nextCP) < 0 または (nextCP) > 0x10FFFF の場合、RangeError 例外をスローする。
    4. resultresultUTF16EncodeCodePoint((nextCP)) の文字列連結に設定する。
  3. Assert: codePoints が空の場合、result は空のStringである。
  4. result を返す。

この関数の"length"プロパティは 1𝔽 です。

22.1.2.3 String.prototype

String.prototypeの初期値はStringプロトタイプオブジェクトです。

このプロパティの属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } です。

22.1.2.4 String.raw ( template, ...substitutions )

この関数は可変個数の引数で呼び出すことができます。第1引数は template であり、残りの引数はList substitutions を形成します。

呼び出されたとき、次の手順を実行します:

  1. substitutionCountsubstitutions 内の要素数とする。
  2. cooked を ? ToObject(template) とする。
  3. literals を ? ToObject(? Get(cooked, "raw")) とする。
  4. literalCount を ? LengthOfArrayLike(literals) とする。
  5. literalCount ≤ 0 の場合、空のStringを返す。
  6. result を空のStringとする。
  7. nextIndex を 0 とする。
  8. 繰り返す:
    1. nextLiteralVal を ? Get(literals, ! ToString(𝔽(nextIndex))) とする。
    2. nextLiteral を ? ToString(nextLiteralVal) とする。
    3. resultresultnextLiteral の文字列連結に設定する。
    4. nextIndex + 1 = literalCount の場合、result を返す。
    5. nextIndex < substitutionCount の場合、次を行う:
      1. nextSubValsubstitutions[nextIndex] とする。
      2. nextSub を ? ToString(nextSubVal) とする。
      3. resultresultnextSub の文字列連結に設定する。
    6. nextIndexnextIndex + 1 に設定する。
Note

この関数はTagged Template(13.3.11)のタグ関数として使用されることを意図しています。そのように呼び出された場合、第1引数は整形式のテンプレートオブジェクトであり、restパラメーターには置換値が含まれます。

22.1.3 Stringプロトタイプオブジェクトのプロパティ

Stringプロトタイプオブジェクトは以下の通りです:

  • %String.prototype%である。
  • String exotic objectであり、そのようなオブジェクトに指定された内部メソッドを持つ。
  • [[StringData]]内部スロットを持ち、その値は空のStringである。
  • 初期値が +0𝔽 であり、属性が { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } である"length"プロパティを持つ。
  • [[Prototype]]内部スロットを持ち、その値は %Object.prototype% である。

明示的に別途述べられている場合を除き、以下で定義されるStringプロトタイプオブジェクトのメソッドは汎用ではなく、それらに渡されるthis値は、String値であるか、String値に初期化された[[StringData]]内部スロットを持つオブジェクトでなければなりません。

22.1.3.1 String.prototype.at ( index )

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. lenstr の長さとする。
  5. relativeIndex を ? ToIntegerOrInfinity(index) とする。
  6. relativeIndex ≥ 0 の場合、次を行う:
    1. krelativeIndex とする。
  7. それ以外の場合、
    1. klen + relativeIndex とする。
  8. k < 0 または klen の場合、undefined を返す。
  9. strk から k + 1 までの部分文字列を返す。

22.1.3.2 String.prototype.charAt ( pos )

Note 1

このメソッドは、このオブジェクトをStringに変換した結果のString値内のインデックス pos にあるコード単位を含む、単一要素のStringを返します。そのインデックスに要素が存在しない場合、結果は空のStringです。結果はString値であり、Stringオブジェクトではありません。

posが整数Numberである場合、x.charAt(pos)の結果はx.substring(pos, pos + 1)の結果と等価です。

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. position を ? ToIntegerOrInfinity(pos) とする。
  5. sizestr の長さとする。
  6. position < 0 または positionsize の場合、空のStringを返す。
  7. strposition から position + 1 までの部分文字列を返す。
Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.3 String.prototype.charCodeAt ( pos )

Note 1

このメソッドは、このオブジェクトをStringに変換した結果のString内のインデックス pos にあるコード単位の数値であるNumber(216未満の非負の整数Number)を返します。そのインデックスに要素が存在しない場合、結果は NaN です。

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. position を ? ToIntegerOrInfinity(pos) とする。
  5. sizestr の長さとする。
  6. position < 0 または positionsize の場合、NaN を返す。
  7. String str 内のインデックス position にあるコード単位の数値に対応するNumber値を返す。
Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.4 String.prototype.codePointAt ( pos )

Note 1

このメソッドは、このオブジェクトをStringに変換した結果のString内のインデックス pos にある文字列要素から始まるUTF-16符号化コードポイント(6.1.4)の数値である、0x10FFFF𝔽 以下の非負の整数Numberを返します。そのインデックスに要素が存在しない場合、結果は undefined です。有効なUTF-16サロゲートペアが pos から始まらない場合、結果は pos にあるコード単位です。

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. position を ? ToIntegerOrInfinity(pos) とする。
  5. sizestr の長さとする。
  6. position < 0 または positionsize の場合、undefined を返す。
  7. cpCodePointAt(str, position) とする。
  8. 𝔽(cp.[[CodePoint]]) を返す。
Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.5 String.prototype.concat ( ...args )

Note 1

このメソッドが呼び出されたとき、this値(Stringに変換されたもの)のコード単位に続けて、それぞれの引数をStringに変換したもののコード単位から成るString値を返します。結果はString値であり、Stringオブジェクトではありません。

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. resultstr とする。
  5. args の各要素 next について、次を行う:
    1. nextString を ? ToString(next) とする。
    2. resultresultnextString の文字列連結に設定する。
  6. result を返す。

このメソッドの"length"プロパティは 1𝔽 です。

Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.6 String.prototype.constructor

String.prototype.constructorの初期値は %String% です。

22.1.3.7 String.prototype.endsWith ( searchString [ , endPosition ] )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. isRegExp を ? IsRegExp(searchString) とする。
  5. isRegExptrue の場合、TypeError 例外をスローする。
  6. searchStr を ? ToString(searchString) とする。
  7. lenstr の長さとする。
  8. endPositionundefined の場合、poslen とする。そうでない場合、pos を ? ToIntegerOrInfinity(endPosition) とする。
  9. endpos を 0 と len の間にクランプした結果とする。
  10. searchLengthsearchStr の長さとする。
  11. searchLength = 0 の場合、true を返す。
  12. startend - searchLength とする。
  13. start < 0 の場合、false を返す。
  14. substringstrstart から end までの部分文字列とする。
  15. substringsearchStr である場合、true を返す。
  16. false を返す。
Note 1

第1引数がRegExpである場合に例外をスローすることは、将来の版がそのような引数値を許す拡張を定義できるようにするために指定されています。

Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.8 String.prototype.includes ( searchString [ , position ] )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. isRegExp を ? IsRegExp(searchString) とする。
  5. isRegExptrue の場合、TypeError 例外をスローする。
  6. searchStr を ? ToString(searchString) とする。
  7. pos を ? ToIntegerOrInfinity(position) とする。
  8. Assert: positionundefined の場合、pos は 0 である。
  9. lenstr の長さとする。
  10. startpos を 0 と len の間にクランプした結果とする。
  11. indexStringIndexOf(str, searchStr, start) とする。
  12. indexnot-found の場合、false を返す。
  13. true を返す。
Note 1

searchString が、このオブジェクトをStringに変換した結果の部分文字列として、position 以上の1つ以上のインデックスに現れる場合、この関数は true を返します。それ以外の場合は false を返します。positionundefined の場合、String全体を検索するために0が仮定されます。

Note 2

第1引数がRegExpである場合に例外をスローすることは、将来の版がそのような引数値を許す拡張を定義できるようにするために指定されています。

Note 3

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.9 String.prototype.indexOf ( searchString [ , position ] )

Note 1

searchString が、このオブジェクトをStringに変換した結果の部分文字列として、position 以上の1つ以上のインデックスに現れる場合、そのような最小のインデックスが返されます。それ以外の場合、-1𝔽 が返されます。positionundefined の場合、String全体を検索するために +0𝔽 が仮定されます。

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. searchStr を ? ToString(searchString) とする。
  5. pos を ? ToIntegerOrInfinity(position) とする。
  6. Assert: positionundefined の場合、pos は 0 である。
  7. lenstr の長さとする。
  8. startpos を 0 と len の間にクランプした結果とする。
  9. resultStringIndexOf(str, searchStr, start) とする。
  10. resultnot-found の場合、-1𝔽 を返す。
  11. 𝔽(result) を返す。
Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.10 String.prototype.isWellFormed ( )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. IsStringWellFormedUnicode(str) を返す。

22.1.3.11 String.prototype.lastIndexOf ( searchString [ , position ] )

Note 1

searchString が、このオブジェクトをStringに変換した結果の部分文字列として、position 以下の1つ以上のインデックスに現れる場合、そのような最大のインデックスが返されます。それ以外の場合、-1𝔽 が返されます。positionundefined の場合、String全体を検索するためにString値の長さが仮定されます。

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. searchStr を ? ToString(searchString) とする。
  5. numPos を ? ToNumber(position) とする。
  6. Assert: positionundefined の場合、numPosNaN である。
  7. numPosNaN の場合、pos を +∞ とする。そうでない場合、pos を ! ToIntegerOrInfinity(numPos) とする。
  8. lenstr の長さとする。
  9. searchLensearchStr の長さとする。
  10. len < searchLen の場合、-1𝔽 を返す。
  11. startpos を 0 と len - searchLen の間にクランプした結果とする。
  12. resultStringLastIndexOf(str, searchStr, start) とする。
  13. resultnot-found の場合、-1𝔽 を返す。
  14. 𝔽(result) を返す。
Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.12 String.prototype.localeCompare ( that [ , reserved1 [ , reserved2 ] ] )

ECMA-402 Internationalization APIを含むECMAScript実装は、このメソッドをECMA-402仕様で指定されるとおりに実装しなければなりません。ECMAScript実装がECMA-402 APIを含まない場合、このメソッドについて以下の仕様が使用されます:

このメソッドは、this値(String str に変換される)と that(String thatValue に変換される)との実装定義のロケール依存String比較の結果を表す、NaN 以外のNumberを返します。結果は、ホスト環境の現在のロケールの慣習に従うString値のソート順に対応することを意図しており、strthatValue より前に順序付けられる場合は負、strthatValue より後に順序付けられる場合は正、それ以外の場合はゼロ(strthatValue の間に相対的な順序がないことを表す)になります。

比較を実行する前に、このメソッドはStringを準備するために次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. thatValue を ? ToString(that) とする。

このメソッドの任意の第2および第3パラメーターの意味はECMA-402仕様で定義されます。ECMA-402サポートを含まない実装は、それらのパラメーター位置に他の解釈を割り当ててはなりません。

実際の戻り値は、追加情報をエンコードすることを許すために実装定義ですが、このメソッドは、2つの引数のメソッドとして考えた場合、すべてのStringの集合上の全順序を定義する一貫した比較関数であることが要求されます。このメソッドはまた、Unicode Standardに従う正準等価性を認識して尊重することも要求されます。これには、区別可能であるが正準等価なStringを比較するときに +0𝔽 を返すことが含まれます。

Note 1

このメソッド自体は、Array.prototype.sortへの引数として直接適していません。後者は2つの引数の関数を要求するためです。

Note 2

このメソッドは、ECMAScript環境がホスト環境から利用できる任意の言語依存および/またはロケール依存の比較機能に依存してもよく、ホスト環境の現在のロケールの慣習に従って比較することを意図しています。しかし、比較能力に関係なく、このメソッドはUnicode Standardに従う正準等価性を認識して尊重しなければなりません。たとえば、以下の比較はすべて +0𝔽 を返さなければなりません:

// Å ANGSTROM SIGN vs.
// Å LATIN CAPITAL LETTER A + COMBINING RING ABOVE
"\u212B".localeCompare("A\u030A")

// Ω OHM SIGN vs.
// Ω GREEK CAPITAL LETTER OMEGA
"\u2126".localeCompare("\u03A9")

// ṩ LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE vs.
// ṩ LATIN SMALL LETTER S + COMBINING DOT ABOVE + COMBINING DOT BELOW
"\u1E69".localeCompare("s\u0307\u0323")

// ḍ̇ LATIN SMALL LETTER D WITH DOT ABOVE + COMBINING DOT BELOW vs.
// ḍ̇ LATIN SMALL LETTER D WITH DOT BELOW + COMBINING DOT ABOVE
"\u1E0B\u0323".localeCompare("\u1E0D\u0307")

// 가 HANGUL CHOSEONG KIYEOK + HANGUL JUNGSEONG A vs.
// 가 HANGUL SYLLABLE GA
"\u1100\u1161".localeCompare("\uAC00")

正準等価性の定義および議論については、Unicode Standardの第2章および第3章、ならびに Unicode Standard Annex #15, Unicode Normalization Forms および Unicode Technical Note #5, Canonical Equivalence in Applications を参照してください。また、Unicode Technical Standard #10, Unicode Collation Algorithm も参照してください。

このメソッドは、Unicode Standard第3章3.7節で定義されるUnicode互換等価性または互換分解を尊重しないことが推奨されます。

Note 3

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.13 String.prototype.match ( regexpOrPattern )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. regexpOrPattern がObjectである場合、次を行う:
    1. matcher を ? GetMethod(regexpOrPattern, %Symbol.match%) とする。
    2. matcherundefined でない場合、次を行う:
      1. Call(matcher, regexpOrPattern, « thisValue ») を返す。
  4. str を ? ToString(thisValue) とする。
  5. regexp を ? RegExpCreate(regexpOrPattern, undefined) とする。
  6. Invoke(regexp, %Symbol.match%, « str ») を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.14 String.prototype.matchAll ( regexpOrPattern )

このメソッドは、this値を表すStringに対して regexpOrPattern による正規表現マッチを実行し、マッチ結果を生成するイテレーターを返します。各マッチ結果は、Stringのマッチした部分を第1要素として含み、その後に任意のキャプチャグループによってマッチされた部分が続くArrayです。正規表現が一度もマッチしない場合、返されたイテレーターはマッチ結果を生成しません。

呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. regexpOrPattern がObjectである場合、次を行う:
    1. isRegExp を ? IsRegExp(regexpOrPattern) とする。
    2. isRegExptrue の場合、次を行う:
      1. flags を ? Get(regexpOrPattern, "flags") とする。
      2. RequireObjectCoercible(flags) を実行する。
      3. ToString(flags) が "g" を含まない場合、TypeError 例外をスローする。
    3. matcher を ? GetMethod(regexpOrPattern, %Symbol.matchAll%) とする。
    4. matcherundefined でない場合、次を行う:
      1. Call(matcher, regexpOrPattern, « thisValue ») を返す。
  4. str を ? ToString(thisValue) とする。
  5. regexp を ? RegExpCreate(regexpOrPattern, "g") とする。
  6. Invoke(regexp, %Symbol.matchAll%, « str ») を返す。
Note 1
このメソッドは意図的に汎用であり、そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。
Note 2
String.prototype.splitと同様に、String.prototype.matchAllは通常、入力を変更せずに動作するように設計されています。

22.1.3.15 String.prototype.normalize ( [ form ] )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. formundefined の場合、f"NFC" とする。
  5. それ以外の場合、f を ? ToString(form) とする。
  6. f"NFC""NFD""NFKC"、または "NFKD" のいずれでもない場合、RangeError 例外をスローする。
  7. ns を、最新のUnicode Standard, Normalization Forms で指定されるように、strf によって名付けられる正規化形式へ正規化した結果であるString値とする。
  8. ns を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.16 String.prototype.padEnd ( maxLength [ , fillString ] )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. StringPaddingBuiltinsImpl(thisValue, maxLength, fillString, end) を返す。

22.1.3.17 String.prototype.padStart ( maxLength [ , fillString ] )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. StringPaddingBuiltinsImpl(thisValue, maxLength, fillString, start) を返す。

22.1.3.17.1 StringPaddingBuiltinsImpl ( thisValue, maxLength, fillString, placement )

The abstract operation StringPaddingBuiltinsImpl takes arguments thisValue (ECMAScript言語値), maxLength (ECMAScript言語値), fillString (ECMAScript言語値), and placement (start または end) and returns Stringを含む正常完了またはスロー完了. It performs the following steps when called:

  1. str を ? ToString(thisValue) とする。
  2. intMaxLength(? ToLength(maxLength)) とする。
  3. stringLengthstr の長さとする。
  4. intMaxLengthstringLength の場合、str を返す。
  5. fillStringundefined の場合、fillString をコード単位0x0020(SPACE)のみから成るString値に設定する。
  6. それ以外の場合、fillString を ? ToString(fillString) に設定する。
  7. StringPad(str, intMaxLength, fillString, placement) を返す。

22.1.3.17.2 StringPad ( str, maxLength, fillString, placement )

The abstract operation StringPad takes arguments str (String), maxLength (非負整数), fillString (String), and placement (start または end) and returns String. It performs the following steps when called:

  1. stringLengthstr の長さとする。
  2. maxLengthstringLength の場合、str を返す。
  3. fillString が空のStringである場合、str を返す。
  4. fillLenmaxLength - stringLength とする。
  5. truncatedStringFiller を、fillString の反復連結を長さ fillLen に切り詰めたString値とする。
  6. placementstart である場合、truncatedStringFillerstr の文字列連結を返す。
  7. strtruncatedStringFiller の文字列連結を返す。
Note 1

引数 maxLength は、str の長さより小さくならないようにクランプされます。

Note 2

引数 fillString の既定値は " "(コード単位0x0020 SPACEから成るString値)です。

22.1.3.17.3 ToZeroPaddedDecimalString ( n, minLength )

The abstract operation ToZeroPaddedDecimalString takes arguments n (非負整数) and minLength (非負整数) and returns String. It performs the following steps when called:

  1. str を、10進数として形式化された n のString表現とする。
  2. StringPad(str, minLength, "0", start) を返す。

22.1.3.18 String.prototype.repeat ( count )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. n を ? ToIntegerOrInfinity(count) とする。
  5. n < 0 または n = +∞ の場合、RangeError 例外をスローする。
  6. n = 0 の場合、空のStringを返す。
  7. strn 個のコピーを連結して作られるString値を返す。
Note 1

このメソッドは、this値(Stringに変換されたもの)のコード単位を count 回繰り返したString値を作成します。

Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.19 String.prototype.replace ( searchValue, replaceValue )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. searchValue がObjectである場合、次を行う:
    1. replacer を ? GetMethod(searchValue, %Symbol.replace%) とする。
    2. replacerundefined でない場合、次を行う:
      1. Call(replacer, searchValue, « thisValue, replaceValue ») を返す。
  4. string を ? ToString(thisValue) とする。
  5. searchString を ? ToString(searchValue) とする。
  6. functionalReplaceIsCallable(replaceValue) とする。
  7. functionalReplacefalse の場合、次を行う:
    1. replaceValue を ? ToString(replaceValue) に設定する。
  8. searchLengthsearchString の長さとする。
  9. positionStringIndexOf(string, searchString, 0) とする。
  10. positionnot-found の場合、string を返す。
  11. precedingstring の 0 から position までの部分文字列とする。
  12. followingstringposition + searchLength からの部分文字列とする。
  13. functionalReplacetrue の場合、次を行う:
    1. replacement を ? ToString(? Call(replaceValue, undefined, « searchString, 𝔽(position), string »)) とする。
  14. それ以外の場合、
    1. Assert: replaceValue はStringである。
    2. captures を新しい空のListとする。
    3. replacement を ! GetSubstitution(searchString, string, position, captures, undefined, replaceValue) とする。
  15. precedingreplacement、および following の文字列連結を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.19.1 GetSubstitution ( matched, str, position, captures, namedCaptures, replacementTemplate )

The abstract operation GetSubstitution takes arguments matched (String), str (String), position (非負整数), captures (StringまたはundefinedList), namedCaptures (Objectまたはundefined), and replacementTemplate (String) and returns Stringを含む正常完了またはスロー完了. この抽象操作の目的において、10進数字は0x0030(DIGIT ZERO)から0x0039(DIGIT NINE)までの包含区間内のコード単位です。 It performs the following steps when called:

  1. stringLengthstr の長さとする。
  2. Assert: positionstringLength
  3. result を空のStringとする。
  4. templateRemainderreplacementTemplate とする。
  5. templateRemainder が空のStringでない間、繰り返す:
    1. NOTE: 以下のステップは reftemplateRemainder の接頭辞)を分離し、refReplacement(その置換)を決定し、その置換を result に追加する。
    2. templateRemainder"$$" で始まる場合、次を行う:
      1. ref"$$" とする。
      2. refReplacement"$" とする。
    3. そうでなく templateRemainder"$`" で始まる場合、次を行う:
      1. ref"$`" とする。
      2. refReplacementstr の 0 から position までの部分文字列とする。
    4. そうでなく templateRemainder"$&" で始まる場合、次を行う:
      1. ref"$&" とする。
      2. refReplacementmatched とする。
    5. そうでなく templateRemainder"$'"(0x0024(DOLLAR SIGN)の後に0x0027(APOSTROPHE)が続く)で始まる場合、次を行う:
      1. ref"$'" とする。
      2. matchLengthmatched の長さとする。
      3. tailPosposition + matchLength とする。
      4. refReplacementstrmin(tailPos, stringLength) からの部分文字列とする。
      5. NOTE: tailPosstringLength を超える可能性があるのは、この抽象操作が、"exec"プロパティが組み込みの %RegExp.prototype.exec% ではないオブジェクト上で %RegExp.prototype% の組み込み %Symbol.replace% メソッドの呼び出しによって起動された場合だけである。
    6. そうでなく templateRemainder"$" に続けて1つ以上の10進数字で始まる場合、次を行う:
      1. templateRemainder"$" に続けて2つ以上の10進数字で始まる場合、digitCount を 2 とする。そうでない場合、digitCount を 1 とする。
      2. digitstemplateRemainder の 1 から 1 + digitCount までの部分文字列とする。
      3. index(StringToNumber(digits)) とする。
      4. Assert: 0 ≤ index ≤ 99。
      5. captureLencaptures 内の要素数とする。
      6. index > captureLen かつ digitCount = 2 の場合、次を行う:
        1. NOTE: 2桁の置換パターンがキャプチャグループ数を超えるインデックスを指定する場合、それは1桁の置換パターンに続くリテラル数字として扱われる。
        2. digitCount を 1 に設定する。
        3. digitsdigits の 0 から 1 までの部分文字列に設定する。
        4. index(StringToNumber(digits)) に設定する。
      7. reftemplateRemainder の 0 から 1 + digitCount までの部分文字列とする。
      8. 1 ≤ indexcaptureLen の場合、次を行う:
        1. capturecaptures[index - 1] とする。
        2. captureundefined の場合、次を行う:
          1. refReplacement を空のStringとする。
        3. それ以外の場合、
          1. refReplacementcapture とする。
      9. それ以外の場合、
        1. refReplacementref とする。
    7. そうでなく templateRemainder"$<" で始まる場合、次を行う:
      1. gtPosStringIndexOf(templateRemainder, ">", 0) とする。
      2. gtPosnot-found であるか、または namedCapturesundefined である場合、次を行う:
        1. ref"$<" とする。
        2. refReplacementref とする。
      3. それ以外の場合、
        1. reftemplateRemainder の 0 から gtPos + 1 までの部分文字列とする。
        2. groupNametemplateRemainder の 2 から gtPos までの部分文字列とする。
        3. Assert: namedCaptures はObjectである。
        4. capture を ? Get(namedCaptures, groupName) とする。
        5. captureundefined の場合、次を行う:
          1. refReplacement を空のStringとする。
        6. それ以外の場合、
          1. refReplacement を ? ToString(capture) とする。
    8. それ以外の場合、
      1. reftemplateRemainder の 0 から 1 までの部分文字列とする。
      2. refReplacementref とする。
    9. refLengthref の長さとする。
    10. templateRemaindertemplateRemainderrefLength からの部分文字列に設定する。
    11. resultresultrefReplacement の文字列連結に設定する。
  6. result を返す。

22.1.3.20 String.prototype.replaceAll ( searchValue, replaceValue )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. searchValue がObjectである場合、次を行う:
    1. isRegExp を ? IsRegExp(searchValue) とする。
    2. isRegExptrue の場合、次を行う:
      1. flags を ? Get(searchValue, "flags") とする。
      2. RequireObjectCoercible(flags) を実行する。
      3. ToString(flags) が "g" を含まない場合、TypeError 例外をスローする。
    3. replacer を ? GetMethod(searchValue, %Symbol.replace%) とする。
    4. replacerundefined でない場合、次を行う:
      1. Call(replacer, searchValue, « thisValue, replaceValue ») を返す。
  4. string を ? ToString(thisValue) とする。
  5. searchString を ? ToString(searchValue) とする。
  6. functionalReplaceIsCallable(replaceValue) とする。
  7. functionalReplacefalse の場合、次を行う:
    1. replaceValue を ? ToString(replaceValue) に設定する。
  8. searchLengthsearchString の長さとする。
  9. advanceBymax(1, searchLength) とする。
  10. matchPositions を新しい空のListとする。
  11. positionStringIndexOf(string, searchString, 0) とする。
  12. positionnot-found でない間、繰り返す:
    1. positionmatchPositions に追加する。
    2. positionStringIndexOf(string, searchString, position + advanceBy) に設定する。
  13. endOfLastMatch を 0 とする。
  14. result を空のStringとする。
  15. matchPositions の各要素 matchPosition について、次を行う:
    1. preservedstringendOfLastMatch から matchPosition までの部分文字列とする。
    2. functionalReplacetrue の場合、次を行う:
      1. replacement を ? ToString(? Call(replaceValue, undefined, « searchString, 𝔽(matchPosition), string »)) とする。
    3. それ以外の場合、
      1. Assert: replaceValue はStringである。
      2. captures を新しい空のListとする。
      3. replacement を ! GetSubstitution(searchString, string, matchPosition, captures, undefined, replaceValue) とする。
    4. resultresultpreserved、および replacement の文字列連結に設定する。
    5. endOfLastMatchmatchPosition + searchLength に設定する。
  16. endOfLastMatch < string の長さ の場合、次を行う:
    1. resultresultstringendOfLastMatch からの部分文字列の文字列連結に設定する。
  17. result を返す。

22.1.3.21 String.prototype.search ( regexpOrPattern )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. regexpOrPattern がObjectである場合、次を行う:
    1. searcher を ? GetMethod(regexpOrPattern, %Symbol.search%) とする。
    2. searcherundefined でない場合、次を行う:
      1. Call(searcher, regexpOrPattern, « thisValue ») を返す。
  4. string を ? ToString(thisValue) とする。
  5. regexp を ? RegExpCreate(regexpOrPattern, undefined) とする。
  6. Invoke(regexp, %Symbol.search%, « string ») を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.22 String.prototype.slice ( start, end )

このメソッドは、このオブジェクトをStringに変換した結果の部分文字列を返します。これはインデックス start から始まり、インデックス end の直前まで(または endundefined の場合はStringの末尾まで)続きます。start が負である場合、それは sourceLength + start として扱われます。ここで sourceLength はStringの長さです。end が負である場合、それは sourceLength + end として扱われます。ここで sourceLength はStringの長さです。結果はString値であり、Stringオブジェクトではありません。

呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. lenstr の長さとする。
  5. intStart を ? ToIntegerOrInfinity(start) とする。
  6. intStart = -∞ の場合、from を 0 とする。
  7. そうでなく intStart < 0 の場合、frommax(len + intStart, 0) とする。
  8. それ以外の場合、frommin(intStart, len) とする。
  9. endundefined の場合、intEndlen とする。そうでない場合、intEnd を ? ToIntegerOrInfinity(end) とする。
  10. intEnd = -∞ の場合、to を 0 とする。
  11. そうでなく intEnd < 0 の場合、tomax(len + intEnd, 0) とする。
  12. それ以外の場合、tomin(intEnd, len) とする。
  13. fromto の場合、空のStringを返す。
  14. strfrom から to までの部分文字列を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.23 String.prototype.split ( separator, limit )

このメソッドは、このオブジェクトをStringに変換した結果の部分文字列を格納したArrayを返します。部分文字列は、separator の出現を左から右に検索することによって決定されます。これらの出現は、返される配列内のどのStringの一部でもありませんが、String値を分割する役割を果たします。separator の値は任意の長さのStringであってもよく、または%Symbol.split%メソッドを持つRegExpなどのオブジェクトであってもかまいません。

呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. separator がObjectである場合、次を行う:
    1. splitter を ? GetMethod(separator, %Symbol.split%) とする。
    2. splitterundefined でない場合、次を行う:
      1. Call(splitter, separator, « thisValue, limit ») を返す。
  4. str を ? ToString(thisValue) とする。
  5. limitundefined の場合、lim を 232 - 1 とする。そうでない場合、lim(? ToUint32(limit)) とする。
  6. separatorStr を ? ToString(separator) とする。
  7. lim = 0 の場合、次を行う:
    1. CreateArrayFromList(« ») を返す。
  8. separatorundefined の場合、次を行う:
    1. CreateArrayFromListstr ») を返す。
  9. separatorLengthseparatorStr の長さとする。
  10. separatorLength = 0 の場合、次を行う:
    1. strLenstr の長さとする。
    2. outLenlim を 0 と strLen の間にクランプした結果とする。
    3. headstr の 0 から outLen までの部分文字列とする。
    4. codeUnits を、head の要素であるコード単位の列から成るListとする。
    5. CreateArrayFromList(codeUnits) を返す。
  11. str が空のStringである場合、CreateArrayFromListstr ») を返す。
  12. substrings を新しい空のListとする。
  13. searchStart を 0 とする。
  14. matchIndexStringIndexOf(str, separatorStr, 0) とする。
  15. matchIndexnot-found でない間、繰り返す:
    1. substringstrsearchStart から matchIndex までの部分文字列とする。
    2. substringsubstrings に追加する。
    3. substrings 内の要素数が lim である場合、CreateArrayFromList(substrings) を返す。
    4. searchStartmatchIndex + separatorLength に設定する。
    5. matchIndexStringIndexOf(str, separatorStr, searchStart) に設定する。
  16. substringstrsearchStart からの部分文字列とする。
  17. substringsubstrings に追加する。
  18. CreateArrayFromList(substrings) を返す。
Note 1

separator の値は空のStringであってもかまいません。この場合、separator は入力Stringの先頭または末尾の空の部分文字列にはマッチせず、また前回のセパレータマッチの末尾の空の部分文字列にもマッチしません。separator が空のStringである場合、Stringは個々のコード単位要素に分割されます。結果配列の長さはStringの長さに等しく、各部分文字列は1つのコード単位を含みます。

this値が空のStringである(または空のStringに変換される)場合、結果は separator が空のStringにマッチできるかどうかに依存します。マッチできる場合、結果配列は要素を含みません。そうでない場合、結果配列は1つの要素を含み、それは空のStringです。

separatorundefined である場合、結果配列は、this値(Stringに変換されたもの)である1つのStringだけを含みます。limitundefined でない場合、出力配列は limit 要素以下になるように切り詰められます。

Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.24 String.prototype.startsWith ( searchString [ , position ] )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. isRegExp を ? IsRegExp(searchString) とする。
  5. isRegExptrue の場合、TypeError 例外をスローする。
  6. searchStr を ? ToString(searchString) とする。
  7. lenstr の長さとする。
  8. positionundefined の場合、pos を 0 とする。そうでない場合、pos を ? ToIntegerOrInfinity(position) とする。
  9. startpos を 0 と len の間にクランプした結果とする。
  10. searchLengthsearchStr の長さとする。
  11. searchLength = 0 の場合、true を返す。
  12. endstart + searchLength とする。
  13. end > len の場合、false を返す。
  14. substringstrstart から end までの部分文字列とする。
  15. substringsearchStr である場合、true を返す。
  16. false を返す。
Note 1

第1引数がRegExpである場合に例外をスローすることは、将来の版がそのような引数値を許す拡張を定義できるようにするために指定されています。

Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.25 String.prototype.substring ( start, end )

このメソッドは、このオブジェクトをStringに変換した結果の部分文字列を返します。これはインデックス start から始まり、Stringのインデックス end の直前まで(または endundefined の場合はStringの末尾まで)続きます。結果はString値であり、Stringオブジェクトではありません。

いずれかの引数が NaN または負である場合、それはゼロに置き換えられます。いずれかの引数がStringの長さより厳密に大きい場合、それはStringの長さに置き換えられます。

startend より厳密に大きい場合、それらは交換されます。

呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. lenstr の長さとする。
  5. intStart を ? ToIntegerOrInfinity(start) とする。
  6. endundefined の場合、intEndlen とする。そうでない場合、intEnd を ? ToIntegerOrInfinity(end) とする。
  7. finalStartintStart を 0 と len の間にクランプした結果とする。
  8. finalEndintEnd を 0 と len の間にクランプした結果とする。
  9. frommin(finalStart, finalEnd) とする。
  10. tomax(finalStart, finalEnd) とする。
  11. strfrom から to までの部分文字列を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.26 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Internationalization APIを含むECMAScript実装は、このメソッドをECMA-402仕様で指定されるとおりに実装しなければなりません。ECMAScript実装がECMA-402 APIを含まない場合、このメソッドについて以下の仕様が使用されます:

このメソッドは、6.1.4 で説明されるように、String値をUTF-16符号化コードポイントの列として解釈します。

これはtoLowerCaseとまったく同じように動作しますが、ホスト環境の現在のロケールの慣習に対応するロケール依存の結果を生成することを意図している点が異なります。その言語の規則が通常のUnicode大文字小文字マッピングと衝突する少数の場合(トルコ語など)にのみ差異があります。

このメソッドの任意パラメーターの意味はECMA-402仕様で定義されます。ECMA-402サポートを含まない実装は、これらのパラメーター位置を他の目的に使用してはなりません。

Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.27 String.prototype.toLocaleUpperCase ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Internationalization APIを含むECMAScript実装は、このメソッドをECMA-402仕様で指定されるとおりに実装しなければなりません。ECMAScript実装がECMA-402 APIを含まない場合、このメソッドについて以下の仕様が使用されます:

このメソッドは、6.1.4 で説明されるように、String値をUTF-16符号化コードポイントの列として解釈します。

これはtoUpperCaseとまったく同じように動作しますが、ホスト環境の現在のロケールの慣習に対応するロケール依存の結果を生成することを意図している点が異なります。その言語の規則が通常のUnicode大文字小文字マッピングと衝突する少数の場合(トルコ語など)にのみ差異があります。

このメソッドの任意パラメーターの意味はECMA-402仕様で定義されます。ECMA-402サポートを含まない実装は、これらのパラメーター位置を他の目的に使用してはなりません。

Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.28 String.prototype.toLowerCase ( )

このメソッドは、6.1.4 で説明されるように、String値をUTF-16符号化コードポイントの列として解釈します。

呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. sTextStringToCodePoints(str) とする。
  5. lowerText を、Unicode Default Case Conversionアルゴリズムに従う toLowercase(sText) とする。
  6. lowercaseStringCodePointsToString(lowerText) とする。
  7. lowercaseString を返す。

結果は、Unicode Character Databaseにおけるロケール非依存の大文字小文字マッピングに従って導かれなければなりません(これには、ファイル UnicodeData.txt だけでなく、それに付随するファイル SpecialCasing.txt 内のすべてのロケール非依存マッピングも明示的に含まれます)。

Note 1

一部のコードポイントの大文字小文字マッピングは複数のコードポイントを生成する場合があります。この場合、結果のStringは元のStringと同じ長さでないことがあります。toUpperCasetoLowerCaseはいずれも文脈依存の動作を持つため、これらのメソッドは対称的ではありません。言い換えると、s.toUpperCase().toLowerCase()は必ずしもs.toLowerCase()と等しいとは限りません。

Note 2

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.29 String.prototype.toString ( )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. ThisStringValue(this値) を返す。
Note

Stringオブジェクトの場合、このメソッドはたまたまvalueOfメソッドと同じものを返します。

22.1.3.30 String.prototype.toUpperCase ( )

このメソッドは、6.1.4 で説明されるように、String値をUTF-16符号化コードポイントの列として解釈します。

これはString.prototype.toLowerCaseとまったく同じように動作しますが、StringがUnicode Default Case ConversionのtoUppercaseアルゴリズムを使用してマップされる点が異なります。

Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.31 String.prototype.toWellFormed ( )

このメソッドは、このオブジェクトのString表現を返します。その際、サロゲートペアの一部でないすべての先行サロゲートおよび後続サロゲートはU+FFFD(REPLACEMENT CHARACTER)に置き換えられます。

呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. RequireObjectCoercible(thisValue) を実行する。
  3. str を ? ToString(thisValue) とする。
  4. strLenstr の長さとする。
  5. k を 0 とする。
  6. result を空のStringとする。
  7. k < strLen の間、繰り返す:
    1. cpCodePointAt(str, k) とする。
    2. cp.[[IsUnpairedSurrogate]]true の場合、次を行う:
      1. resultresult と 0xFFFD(REPLACEMENT CHARACTER)の文字列連結に設定する。
    3. それ以外の場合、
      1. resultresultUTF16EncodeCodePoint(cp.[[CodePoint]]) の文字列連結に設定する。
    4. kk + cp.[[CodeUnitCount]] に設定する。
  8. result を返す。

22.1.3.32 String.prototype.trim ( )

このメソッドは、6.1.4 で説明されるように、String値をUTF-16符号化コードポイントの列として解釈します。

呼び出されたとき、次の手順を実行します:

  1. thisValuethis値とする。
  2. TrimString(thisValue, start+end) を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.32.1 TrimString ( string, where )

The abstract operation TrimString takes arguments string (ECMAScript言語値) and where (startend、または start+end) and returns Stringを含む正常完了またはスロー完了. 6.1.4 で説明されるように、string をUTF-16符号化コードポイントの列として解釈します。 It performs the following steps when called:

  1. RequireObjectCoercible(string) を実行する。
  2. str を ? ToString(string) とする。
  3. wherestart である場合、次を行う:
    1. trimmedString を、先頭の空白を取り除いた str のコピーであるString値とする。
  4. そうでなく whereend である場合、次を行う:
    1. trimmedString を、末尾の空白を取り除いた str のコピーであるString値とする。
  5. それ以外の場合、
    1. Assert: wherestart+end である。
    2. trimmedString を、先頭と末尾の両方の空白を取り除いた str のコピーであるString値とする。
  6. trimmedString を返す。

空白の定義は WhiteSpaceLineTerminator の和集合です。UnicodeコードポイントがUnicode一般カテゴリ“Space_Separator”(“Zs”)に含まれるかどうかを判定する際、コード単位列は 6.1.4 で指定されるUTF-16符号化コードポイント列として解釈されます。

22.1.3.33 String.prototype.trimEnd ( )

このメソッドは、6.1.4 で説明されるように、String値をUTF-16符号化コードポイントの列として解釈します。

呼び出されたとき、次の手順を実行します:

  1. strthis値とする。
  2. TrimString(str, end) を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.34 String.prototype.trimStart ( )

このメソッドは、6.1.4 で説明されるように、String値をUTF-16符号化コードポイントの列として解釈します。

呼び出されたとき、次の手順を実行します:

  1. strthis値とする。
  2. TrimString(str, start) を返す。
Note

このメソッドは意図的に汎用です。そのthis値がStringオブジェクトであることを要求しません。したがって、メソッドとして使用するために他の種類のオブジェクトへ移すことができます。

22.1.3.35 String.prototype.valueOf ( )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. ThisStringValue(this値) を返す。

22.1.3.35.1 ThisStringValue ( value )

The abstract operation ThisStringValue takes argument value (ECMAScript言語値) and returns Stringを含む正常完了またはスロー完了. It performs the following steps when called:

  1. value がStringである場合、value を返す。
  2. value がObjectであり、value[[StringData]] 内部スロットを持つ場合、次を行う:
    1. strvalue.[[StringData]] とする。
    2. Assert: str はStringである。
    3. str を返す。
  3. TypeError 例外をスローする。

22.1.3.36 String.prototype [ %Symbol.iterator% ] ( )

このメソッドは、String値のコードポイントを反復し、各コードポイントをString値として返すイテレーターオブジェクトを返します。

呼び出されたとき、次の手順を実行します:

  1. strthis値とする。
  2. RequireObjectCoercible(str) を実行する。
  3. str を ? ToString(str) に設定する。
  4. closure を、パラメーターを持たず、str を捕捉し、呼び出されたときに次の手順を実行する新しいAbstract Closureとする:
    1. lenstr の長さとする。
    2. position を 0 とする。
    3. position < len の間、繰り返す:
      1. cpCodePointAt(str, position) とする。
      2. nextIndexposition + cp.[[CodeUnitCount]] とする。
      3. resultStringstrposition から nextIndex までの部分文字列とする。
      4. positionnextIndex に設定する。
      5. GeneratorYield(CreateIteratorResultObject(resultString, false)) を実行する。
    4. NormalCompletion(unused) を返す。
  5. CreateIteratorFromClosure(closure, "%StringIteratorPrototype%", %StringIteratorPrototype%) を返す。

このメソッドの"name"プロパティの値は "[Symbol.iterator]" です。

22.1.4 Stringインスタンスのプロパティ

StringインスタンスはString exotic objectであり、そのようなオブジェクトに指定された内部メソッドを持ちます。StringインスタンスはStringプロトタイプオブジェクトからプロパティを継承します。Stringインスタンスは[[StringData]]内部スロットも持ちます。[[StringData]]内部スロットは、このStringオブジェクトによって表されるString値です。

Stringインスタンスは"length"プロパティ、および整数インデックス名を持つ列挙可能なプロパティの集合を持ちます。

22.1.4.1 length

このStringオブジェクトによって表されるString値内の要素数。

Stringオブジェクトが初期化されると、このプロパティは変化しません。その属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } です。

22.1.5 String Iteratorオブジェクト

String Iterator は、ある特定のStringインスタンスオブジェクトに対する特定の反復を表すオブジェクトです。String Iteratorオブジェクトには名前付きコンストラクターはありません。代わりに、String IteratorオブジェクトはStringインスタンスオブジェクトの特定のメソッドを呼び出すことによって作成されます。

22.1.5.1 %StringIteratorPrototype%オブジェクト

%StringIteratorPrototype%オブジェクトは以下の通りです:

  • すべてのString Iteratorオブジェクトによって継承されるプロパティを持つ。
  • 通常のオブジェクトである。
  • [[Prototype]]内部スロットを持ち、その値は %Iterator.prototype% である。
  • 以下のプロパティを持つ:

22.1.5.1.1 %StringIteratorPrototype%.next ( )

  1. GeneratorResume(this value, empty, "%StringIteratorPrototype%") を返す。

22.1.5.1.2 %StringIteratorPrototype% [ %Symbol.toStringTag% ]

%Symbol.toStringTag%プロパティの初期値はString値 "String Iterator" です。

このプロパティの属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } です。

22.2 RegExp(正規表現)オブジェクト

RegExpオブジェクトは、正規表現および関連するフラグを含みます。

Note

正規表現の形式および機能は、Perl 5プログラミング言語における正規表現機能をモデルとしています。

22.2.1 パターン

RegExpコンストラクターは、入力パターンStringに以下の文法を適用します。文法がStringを Pattern の展開として解釈できない場合、エラーが発生します。

構文

Pattern[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Disjunction[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] | Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Alternative[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: [empty] Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Term[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Term[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Assertion[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Atom[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Atom[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Quantifier Assertion[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: ^ $ \b \B (?= Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?! Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?<= Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?<! Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) Quantifier :: QuantifierPrefix QuantifierPrefix ? QuantifierPrefix :: * + ? { DecimalDigits[~Sep] } { DecimalDigits[~Sep] ,} { DecimalDigits[~Sep] , DecimalDigits[~Sep] } Atom[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: PatternCharacter . \ AtomEscape[?UnicodeMode, ?NamedCaptureGroups] CharacterClass[?UnicodeMode, ?UnicodeSetsMode] ( GroupSpecifier[?UnicodeMode]opt Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers : Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) RegularExpressionModifiers :: [empty] RegularExpressionModifiers RegularExpressionModifier RegularExpressionModifier :: one of i m s SyntaxCharacter :: one of ^ $ \ . * + ? ( ) [ ] { } | PatternCharacter :: SourceCharacter but not SyntaxCharacter AtomEscape[UnicodeMode, NamedCaptureGroups] :: DecimalEscape CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode] [+NamedCaptureGroups] k GroupName[?UnicodeMode] CharacterEscape[UnicodeMode] :: ControlEscape c AsciiLetter 0 [lookahead ∉ DecimalDigit] HexEscapeSequence RegExpUnicodeEscapeSequence[?UnicodeMode] IdentityEscape[?UnicodeMode] ControlEscape :: one of f n r t v GroupSpecifier[UnicodeMode] :: ? GroupName[?UnicodeMode] GroupName[UnicodeMode] :: < RegExpIdentifierName[?UnicodeMode] > RegExpIdentifierName[UnicodeMode] :: RegExpIdentifierStart[?UnicodeMode] RegExpIdentifierName[?UnicodeMode] RegExpIdentifierPart[?UnicodeMode] RegExpIdentifierStart[UnicodeMode] :: IdentifierStartChar \ RegExpUnicodeEscapeSequence[+UnicodeMode] [~UnicodeMode] UnicodeLeadSurrogate UnicodeTrailSurrogate RegExpIdentifierPart[UnicodeMode] :: IdentifierPartChar \ RegExpUnicodeEscapeSequence[+UnicodeMode] [~UnicodeMode] UnicodeLeadSurrogate UnicodeTrailSurrogate RegExpUnicodeEscapeSequence[UnicodeMode] :: [+UnicodeMode] u HexLeadSurrogate \u HexTrailSurrogate [+UnicodeMode] u HexLeadSurrogate [+UnicodeMode] u HexTrailSurrogate [+UnicodeMode] u HexNonSurrogate [~UnicodeMode] u Hex4Digits [+UnicodeMode] u{ CodePoint } UnicodeLeadSurrogate :: any Unicode code point in the inclusive interval from U+D800 to U+DBFF UnicodeTrailSurrogate :: any Unicode code point in the inclusive interval from U+DC00 to U+DFFF

関連付けられる u HexLeadSurrogate の選択が曖昧である各 \u HexTrailSurrogate は、対応する \u HexTrailSurrogate を持たないことになる、最も近い可能な u HexLeadSurrogate に関連付けられなければなりません。

HexLeadSurrogate :: Hex4Digits but only if the MV of Hex4Digits is in the inclusive interval from 0xD800 to 0xDBFF HexTrailSurrogate :: Hex4Digits but only if the MV of Hex4Digits is in the inclusive interval from 0xDC00 to 0xDFFF HexNonSurrogate :: Hex4Digits but only if the MV of Hex4Digits is not in the inclusive interval from 0xD800 to 0xDFFF IdentityEscape[UnicodeMode] :: [+UnicodeMode] SyntaxCharacter [+UnicodeMode] / [~UnicodeMode] SourceCharacter but not UnicodeIDContinue DecimalEscape :: NonZeroDigit DecimalDigits[~Sep]opt [lookahead ∉ DecimalDigit] CharacterClassEscape[UnicodeMode] :: d D s S w W [+UnicodeMode] p{ UnicodePropertyValueExpression } [+UnicodeMode] P{ UnicodePropertyValueExpression } UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue LoneUnicodePropertyNameOrValue UnicodePropertyName :: UnicodePropertyNameCharacters UnicodePropertyNameCharacters :: UnicodePropertyNameCharacter UnicodePropertyNameCharactersopt UnicodePropertyValue :: UnicodePropertyValueCharacters LoneUnicodePropertyNameOrValue :: UnicodePropertyValueCharacters UnicodePropertyValueCharacters :: UnicodePropertyValueCharacter UnicodePropertyValueCharactersopt UnicodePropertyValueCharacter :: UnicodePropertyNameCharacter DecimalDigit UnicodePropertyNameCharacter :: AsciiLetter _ CharacterClass[UnicodeMode, UnicodeSetsMode] :: [ [lookahead ≠ ^] ClassContents[?UnicodeMode, ?UnicodeSetsMode] ] [^ ClassContents[?UnicodeMode, ?UnicodeSetsMode] ] ClassContents[UnicodeMode, UnicodeSetsMode] :: [empty] [~UnicodeSetsMode] NonemptyClassRanges[?UnicodeMode] [+UnicodeSetsMode] ClassSetExpression NonemptyClassRanges[UnicodeMode] :: ClassAtom[?UnicodeMode] ClassAtom[?UnicodeMode] NonemptyClassRangesNoDash[?UnicodeMode] ClassAtom[?UnicodeMode] - ClassAtom[?UnicodeMode] ClassContents[?UnicodeMode, ~UnicodeSetsMode] NonemptyClassRangesNoDash[UnicodeMode] :: ClassAtom[?UnicodeMode] ClassAtomNoDash[?UnicodeMode] NonemptyClassRangesNoDash[?UnicodeMode] ClassAtomNoDash[?UnicodeMode] - ClassAtom[?UnicodeMode] ClassContents[?UnicodeMode, ~UnicodeSetsMode] ClassAtom[UnicodeMode] :: - ClassAtomNoDash[?UnicodeMode] ClassAtomNoDash[UnicodeMode] :: SourceCharacter but not one of \ or ] or - \ ClassEscape[?UnicodeMode] ClassEscape[UnicodeMode] :: b [+UnicodeMode] - CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode] ClassSetExpression :: ClassUnion ClassIntersection ClassSubtraction ClassUnion :: ClassSetRange ClassUnionopt ClassSetOperand ClassUnionopt ClassIntersection :: ClassSetOperand && [lookahead ≠ &] ClassSetOperand ClassIntersection && [lookahead ≠ &] ClassSetOperand ClassSubtraction :: ClassSetOperand -- ClassSetOperand ClassSubtraction -- ClassSetOperand ClassSetRange :: ClassSetCharacter - ClassSetCharacter ClassSetOperand :: NestedClass ClassStringDisjunction ClassSetCharacter NestedClass :: [ [lookahead ≠ ^] ClassContents[+UnicodeMode, +UnicodeSetsMode] ] [^ ClassContents[+UnicodeMode, +UnicodeSetsMode] ] \ CharacterClassEscape[+UnicodeMode] Note 1

ここでの最初の2行はCharacterClassと等価です。

ClassStringDisjunction :: \q{ ClassStringDisjunctionContents } ClassStringDisjunctionContents :: ClassString ClassString | ClassStringDisjunctionContents ClassString :: [empty] NonEmptyClassString NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt ClassSetCharacter :: [lookahead ∉ ClassSetReservedDoublePunctuator] SourceCharacter but not ClassSetSyntaxCharacter \ CharacterEscape[+UnicodeMode] \ ClassSetReservedPunctuator \b ClassSetReservedDoublePunctuator :: one of && !! ## $$ %% ** ++ ,, .. :: ;; << == >> ?? @@ ^^ `` ~~ ClassSetSyntaxCharacter :: one of ( ) [ ] { } / - \ | ClassSetReservedPunctuator :: one of & - ! # % , : ; < = > @ ` ~ Note 2

この節のいくつかの生成式には、B.1.2 の節で代替定義が与えられています。

22.2.1.1 Static Semantics: 早期エラー

Note

この節は B.1.2.1 で修正されます。

Pattern :: Disjunction QuantifierPrefix :: { DecimalDigits , DecimalDigits } Atom :: (? RegularExpressionModifiers : Disjunction )
  • RegularExpressionModifiers に一致したソーステキストが同じコードポイントを複数回含む場合、Syntax Errorです。
Atom :: (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction ) AtomEscape :: k GroupName AtomEscape :: DecimalEscape NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents RegExpIdentifierStart :: \ RegExpUnicodeEscapeSequence RegExpIdentifierStart :: UnicodeLeadSurrogate UnicodeTrailSurrogate RegExpIdentifierPart :: \ RegExpUnicodeEscapeSequence RegExpIdentifierPart :: UnicodeLeadSurrogate UnicodeTrailSurrogate UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue
  • UnicodePropertyName に一致したソーステキストが、Table 64 の「Property name and aliases」列に列挙されているUnicodeプロパティ名またはプロパティ別名でない場合、Syntax Errorです。
  • UnicodePropertyValue に一致したソーステキストが、UnicodePropertyName に一致したソーステキストによって与えられるUnicodeプロパティまたはプロパティ別名について、PropertyValueAliases.txt に列挙されているプロパティ値またはプロパティ値別名でない場合、Syntax Errorです。
UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue
  • LoneUnicodePropertyNameOrValue に一致したソーステキストが、PropertyValueAliases.txt に列挙されているGeneral_Category(gc)プロパティのUnicodeプロパティ値またはプロパティ値別名でも、Table 65 の「Property name and aliases」列に列挙されている二値プロパティまたは二値プロパティ別名でも、Table 66 の「Property name」列に列挙されている文字列の二値プロパティでもない場合、Syntax Errorです。
  • 囲んでいる Pattern[UnicodeSetsMode] パラメーターを持たず、かつ LoneUnicodePropertyNameOrValue に一致したソーステキストが Table 66 の「Property name」列に列挙されている文字列の二値プロパティである場合、Syntax Errorです。
CharacterClassEscape :: P{ UnicodePropertyValueExpression } CharacterClass :: [^ ClassContents ] NestedClass :: [^ ClassContents ] ClassSetRange :: ClassSetCharacter - ClassSetCharacter

22.2.1.2 Static Semantics: CountLeftCapturingParensWithin ( node )

The abstract operation CountLeftCapturingParensWithin takes argument node (Parse Node) and returns 非負整数. node 内の左キャプチャ括弧の数を返します。左キャプチャ括弧とは、 Atom :: ( GroupSpecifieropt Disjunction ) 生成式の ( 終端記号に一致する任意の ( パターン文字です。

Note

この節は B.1.2.2 で修正されます。

It performs the following steps when called:

  1. Assert: nodeRegExp Pattern文法 内の生成式のインスタンスである。
  2. node 内に含まれる Atom :: ( GroupSpecifieropt Disjunction ) Parse Nodeの数を返す。

22.2.1.3 Static Semantics: CountLeftCapturingParensBefore ( node )

The abstract operation CountLeftCapturingParensBefore takes argument node (Parse Node) and returns 非負整数. 囲んでいるパターン内で node の左に出現する左キャプチャ括弧の数を返します。

Note

この節は B.1.2.2 で修正されます。

It performs the following steps when called:

  1. Assert: nodeRegExp Pattern文法 内の生成式のインスタンスである。
  2. patternnode を含む Pattern とする。
  3. pattern 内に含まれ、node より前に出現するか、または node を含む Atom :: ( GroupSpecifieropt Disjunction ) Parse Nodeの数を返す。

22.2.1.4 Static Semantics: MightBothParticipate ( x, y )

The abstract operation MightBothParticipate takes arguments x (Parse Node) and y (Parse Node) and returns Boolean. It performs the following steps when called:

  1. Assert: xy は同じ囲み Pattern を持つ。
  2. 囲んでいる Pattern Disjunction :: Alternative | Disjunction Parse Nodeを含み、xAlternative 内に含まれ y が派生した Disjunction 内に含まれるか、または x が派生した Disjunction 内に含まれ yAlternative 内に含まれる場合、false を返す。
  3. true を返す。

22.2.1.5 Static Semantics: CapturingGroupNumber

The syntax-directed operation CapturingGroupNumber takes no arguments and returns 正整数.

Note

この節は B.1.2.1 で修正されます。

It is defined piecewise over the following productions:

DecimalEscape :: NonZeroDigit
  1. NonZeroDigit のMVを返す。
DecimalEscape :: NonZeroDigit DecimalDigits
  1. nDecimalDigits 内のコードポイント数とする。
  2. NonZeroDigit のMV × 10nDecimalDigits のMVを加えたもの)を返す。

NonZeroDigit のMV」および「DecimalDigits のMV」の定義は 12.9.3 にあります。

22.2.1.6 Static Semantics: IsCharacterClass

The syntax-directed operation IsCharacterClass takes no arguments and returns Boolean.

Note

この節は B.1.2.3 で修正されます。

It is defined piecewise over the following productions:

ClassAtom :: - ClassAtomNoDash :: SourceCharacter but not one of \ or ] or - ClassEscape :: b - CharacterEscape
  1. false を返す。
ClassEscape :: CharacterClassEscape
  1. true を返す。

22.2.1.7 Static Semantics: CharacterValue

The syntax-directed operation CharacterValue takes no arguments and returns 非負整数.

Note 1

この節は B.1.2.4 で修正されます。

It is defined piecewise over the following productions:

ClassAtom :: -
  1. U+002D(HYPHEN-MINUS)の数値を返す。
ClassAtomNoDash :: SourceCharacter but not one of \ or ] or -
  1. chSourceCharacter に一致したコードポイントとする。
  2. ch の数値を返す。
ClassEscape :: b
  1. U+0008(BACKSPACE)の数値を返す。
ClassEscape :: -
  1. U+002D(HYPHEN-MINUS)の数値を返す。
CharacterEscape :: ControlEscape
  1. Table 62 に従う数値を返す。
Table 62: ControlEscapeコードポイント値
ControlEscape 数値 コードポイント Unicode名 記号
t 9 U+0009 CHARACTER TABULATION <HT>
n 10 U+000A LINE FEED (LF) <LF>
v 11 U+000B LINE TABULATION <VT>
f 12 U+000C FORM FEED (FF) <FF>
r 13 U+000D CARRIAGE RETURN (CR) <CR>
CharacterEscape :: c AsciiLetter
  1. chAsciiLetter に一致したコードポイントとする。
  2. ich の数値とする。
  3. i を32で割った余りを返す。
CharacterEscape :: 0 [lookahead ∉ DecimalDigit]
  1. U+0000(NULL)の数値を返す。
Note 2

\0 は <NUL> 文字を表し、10進数字を後続させることはできません。

CharacterEscape :: HexEscapeSequence
  1. HexEscapeSequence のMVを返す。
RegExpUnicodeEscapeSequence :: u HexLeadSurrogate \u HexTrailSurrogate
  1. leadHexLeadSurrogateCharacterValueとする。
  2. trailHexTrailSurrogateCharacterValueとする。
  3. cpUTF16SurrogatePairToCodePoint(lead, trail) とする。
  4. cp の数値を返す。
RegExpUnicodeEscapeSequence :: u Hex4Digits
  1. Hex4Digits のMVを返す。
RegExpUnicodeEscapeSequence :: u{ CodePoint }
  1. CodePoint のMVを返す。
HexLeadSurrogate :: Hex4Digits HexTrailSurrogate :: Hex4Digits HexNonSurrogate :: Hex4Digits
  1. Hex4Digits のMVを返す。
CharacterEscape :: IdentityEscape
  1. chIdentityEscape に一致したコードポイントとする。
  2. ch の数値を返す。
ClassSetCharacter :: SourceCharacter but not ClassSetSyntaxCharacter
  1. chSourceCharacter に一致したコードポイントとする。
  2. ch の数値を返す。
ClassSetCharacter :: \ ClassSetReservedPunctuator
  1. chClassSetReservedPunctuator に一致したコードポイントとする。
  2. ch の数値を返す。
ClassSetCharacter :: \b
  1. U+0008(BACKSPACE)の数値を返す。

22.2.1.8 Static Semantics: MayContainStrings

The syntax-directed operation MayContainStrings takes no arguments and returns Boolean. It is defined piecewise over the following productions:

CharacterClassEscape :: d D s S w W P{ UnicodePropertyValueExpression } UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue NestedClass :: [^ ClassContents ] ClassContents :: [empty] NonemptyClassRanges ClassSetOperand :: ClassSetCharacter
  1. false を返す。
UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue
  1. LoneUnicodePropertyNameOrValue に一致したソーステキストが Table 66 の「Property name」列に列挙されている文字列の二値プロパティである場合、true を返す。
  2. false を返す。
ClassUnion :: ClassSetRange ClassUnionopt
  1. ClassUnion が存在する場合、ClassUnionMayContainStringsを返す。
  2. false を返す。
ClassUnion :: ClassSetOperand ClassUnionopt
  1. ClassSetOperandMayContainStringstrue である場合、true を返す。
  2. ClassUnion が存在する場合、ClassUnionMayContainStringsを返す。
  3. false を返す。
ClassIntersection :: ClassSetOperand && ClassSetOperand
  1. 最初の ClassSetOperandMayContainStringsfalse である場合、false を返す。
  2. 2番目の ClassSetOperandMayContainStringsfalse である場合、false を返す。
  3. true を返す。
ClassIntersection :: ClassIntersection && ClassSetOperand
  1. ClassIntersectionMayContainStringsfalse である場合、false を返す。
  2. ClassSetOperandMayContainStringsfalse である場合、false を返す。
  3. true を返す。
ClassSubtraction :: ClassSetOperand -- ClassSetOperand
  1. 最初の ClassSetOperandMayContainStringsを返す。
ClassSubtraction :: ClassSubtraction -- ClassSetOperand
  1. ClassSubtractionMayContainStringsを返す。
ClassStringDisjunctionContents :: ClassString | ClassStringDisjunctionContents
  1. ClassStringMayContainStringstrue である場合、true を返す。
  2. ClassStringDisjunctionContentsMayContainStringsを返す。
ClassString :: [empty]
  1. true を返す。
ClassString :: NonEmptyClassString
  1. NonEmptyClassStringMayContainStringsを返す。
NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt
  1. NonEmptyClassString が存在する場合、true を返す。
  2. false を返す。

22.2.1.9 Static Semantics: GroupSpecifiersThatMatch ( thisGroupName )

The abstract operation GroupSpecifiersThatMatch takes argument thisGroupName (GroupName Parse Node) and returns GroupSpecifier Parse NodeList. It performs the following steps when called:

  1. namethisGroupNameCapturingGroupNameとする。
  2. patternthisGroupName を含む Pattern とする。
  3. result を新しい空のListとする。
  4. pattern が含む各 GroupSpecifier gs について、次を行う:
    1. gsCapturingGroupNamename である場合、次を行う:
      1. gsresult に追加する。
  5. result を返す。

22.2.1.10 Static Semantics: CapturingGroupName

The syntax-directed operation CapturingGroupName takes no arguments and returns String. It is defined piecewise over the following productions:

GroupName :: < RegExpIdentifierName >
  1. idTextUnescapedRegExpIdentifierNameRegExpIdentifierCodePointsとする。
  2. CodePointsToString(idTextUnescaped) を返す。

22.2.1.11 Static Semantics: RegExpIdentifierCodePoints

The syntax-directed operation RegExpIdentifierCodePoints takes no arguments and returns コードポイントのList. It is defined piecewise over the following productions:

RegExpIdentifierName :: RegExpIdentifierStart
  1. cpRegExpIdentifierStartRegExpIdentifierCodePointとする。
  2. « cp » を返す。
RegExpIdentifierName :: RegExpIdentifierName RegExpIdentifierPart
  1. cps を派生した RegExpIdentifierNameRegExpIdentifierCodePointsとする。
  2. cpRegExpIdentifierPartRegExpIdentifierCodePointとする。
  3. cps と « cp » のリスト連結を返す。

22.2.1.12 Static Semantics: RegExpIdentifierCodePoint

The syntax-directed operation RegExpIdentifierCodePoint takes no arguments and returns コードポイント. It is defined piecewise over the following productions:

RegExpIdentifierStart :: IdentifierStartChar
  1. IdentifierStartChar に一致したコードポイントを返す。
RegExpIdentifierPart :: IdentifierPartChar
  1. IdentifierPartChar に一致したコードポイントを返す。
RegExpIdentifierStart :: \ RegExpUnicodeEscapeSequence RegExpIdentifierPart :: \ RegExpUnicodeEscapeSequence
  1. 数値が RegExpUnicodeEscapeSequenceCharacterValueであるコードポイントを返す。
RegExpIdentifierStart :: UnicodeLeadSurrogate UnicodeTrailSurrogate RegExpIdentifierPart :: UnicodeLeadSurrogate UnicodeTrailSurrogate
  1. lead を、数値が UnicodeLeadSurrogate に一致したコードポイントの数値であるコード単位とする。
  2. trail を、数値が UnicodeTrailSurrogate に一致したコードポイントの数値であるコード単位とする。
  3. UTF16SurrogatePairToCodePoint(lead, trail) を返す。

22.2.2 パターン意味論

正規表現パターンは、以下で説明されるプロセスを用いてAbstract Closureに変換されます。結果が同じである限り、実装は以下に列挙されたものより効率的なアルゴリズムを使用することが推奨されます。Abstract ClosureはRegExpオブジェクトの[[RegExpMatcher]]内部スロットの値として使用されます。

Pattern は、関連付けられたフラグが uv も含まない場合、BMPパターンです。それ以外の場合はUnicodeパターンです。BMPパターンは、Basic Multilingual Planeの範囲内のUnicodeコードポイントである16ビット値の列から成るものとして解釈されるStringに対してマッチします。Unicodeパターンは、UTF-16を用いて符号化されたUnicodeコードポイントから成るものとして解釈されるStringに対してマッチします。BMPパターンの動作を説明する文脈では、“character”は単一の16ビットUnicode BMPコードポイントを意味します。Unicodeパターンの動作を説明する文脈では、“character”はUTF-16符号化コードポイント(6.1.4)を意味します。いずれの文脈でも、“character value”は対応する非符号化コードポイントの数値を意味します。

Pattern の構文および意味論は、Pattern のソーステキストが SourceCharacter 値のListであり、各 SourceCharacter がUnicodeコードポイントに対応するものとして定義されます。BMPパターンが非BMP SourceCharacter を含む場合、パターン全体がUTF-16を用いて符号化され、その符号化の個々のコード単位がListの要素として使用されます。

Note

例えば、単一の非BMP文字 U+1D11E(MUSICAL SYMBOL G CLEF)としてソーステキスト内に表現されたパターンを考えます。Unicodeパターンとして解釈される場合、それは単一のコードポイント U+1D11E から成る単一要素(character)のListになります。しかし、BMPパターンとして解釈される場合、まずUTF-16で符号化され、コード単位 0xD834 と 0xDD1E から成る2要素のListが生成されます。

パターンはECMAScript String値としてRegExpコンストラクターに渡され、その中では非BMP文字はUTF-16で符号化されています。例えば、String値として表現された単一文字MUSICAL SYMBOL G CLEFパターンは、要素がコード単位 0xD834 および 0xDD1E である長さ2のStringです。したがって、2つのパターン文字から成るBMPパターンとして処理するためには、その文字列をさらに変換する必要はありません。しかし、Unicodeパターンとして処理するには、唯一の要素が単一のパターン文字、すなわちコードポイント U+1D11E であるListを生成する際に UTF16SurrogatePairToCodePoint を使用しなければなりません。

実装は実際にこのようなUTF-16への、またはUTF-16からの変換を行わない場合がありますが、この仕様の意味論は、パターンマッチングの結果がそのような変換が行われたかのようであることを要求します。

22.2.2.1 表記

以下の説明では、次の内部データ構造を使用します:

  • CharSetElement は、次の2つの実体のいずれかです:
    • regexpRecord.[[UnicodeSets]]false の場合、CharSetElementは上記のパターン意味論における意味でのcharacterです。
    • regexpRecord.[[UnicodeSets]]true の場合、CharSetElementは、上記のパターン意味論における意味でのcharacterを要素とする列です。これには、空列、1つのcharacterから成る列、および複数のcharacterから成る列が含まれます。便宜上、この種類のCharSetElementを扱う際、個々のcharacterは1つのcharacterから成る列と相互に置き換えて扱われます。
  • CharSet は、CharSetElementの数学的集合です。
  • CaptureRange は、キャプチャに含まれるcharacterの範囲を表すRecord { [[StartIndex]], [[EndIndex]] } です。ここで、[[StartIndex]]input 内の範囲の開始インデックス(包含)を表す整数であり、[[EndIndex]]input 内の範囲の終了インデックス(排他)を表す整数です。任意のCaptureRangeについて、これらのインデックスは [[StartIndex]][[EndIndex]] という不変条件を満たさなければなりません。
  • MatchStateRecord { [[Input]], [[EndIndex]], [[Captures]] } であり、[[Input]]はマッチ対象のStringを表すcharacterのList[[EndIndex]]は整数、[[Captures]]はパターン内の各左キャプチャ括弧に1つずつ対応する値のListです。MatchStateは、正規表現マッチングアルゴリズムにおける部分的なマッチ状態を表すために使用されます。[[EndIndex]]は、パターンによってこれまでにマッチされた最後の入力characterのインデックスに1を加えたものです。一方、[[Captures]]はキャプチャ括弧の結果を保持します。[[Captures]]n番目 の要素は、n番目 のキャプチャ括弧集合によってキャプチャされたcharacterの範囲を表すCaptureRange、または n番目 のキャプチャ括弧集合にまだ到達していない場合は undefined です。バックトラッキングにより、マッチング処理中の任意の時点で多数のMatchStateが使用される場合があります。
  • MatcherContinuation は、1つのMatchState引数を取り、MatchStateまたは failure のいずれかを返すAbstract Closureです。MatcherContinuationは、MatchState引数によって与えられた中間状態から開始して、パターンの残りの部分(クロージャーの捕捉値によって指定される)を input に対してマッチさせようとします。マッチに成功した場合、MatcherContinuationは到達した最終的なMatchStateを返します。マッチに失敗した場合、MatcherContinuationfailure を返します。
  • Matcher は、MatchStateMatcherContinuationという2つの引数を取り、MatchStateまたは failure のいずれかを返すAbstract Closureです。Matcherは、パターンの中間部分パターン(クロージャーの捕捉値によって指定される)を、MatchState引数によって与えられた中間状態から開始して、MatchState[[Input]]に対してマッチさせようとします。MatcherContinuation引数は、パターンの残りをマッチさせるクロージャーであるべきです。パターンの部分パターンをマッチさせて新しいMatchStateを得た後、Matcherはその新しいMatchStateに対してMatcherContinuationを呼び出し、パターンの残りもマッチできるかどうかをテストします。可能であれば、MatcherMatcherContinuationが返したMatchStateを返します。不可能であれば、Matcherは選択点で異なる選択を試み、成功するかすべての可能性が尽きるまでMatcherContinuationを繰り返し呼び出す場合があります。

22.2.2.1.1 RegExp Record

RegExp Record は、コンパイル中および場合によってはマッチング中に必要となるRegExpに関する情報を格納するために使用されるRecord値です。

これは以下のフィールドを持ちます:

Table 63: RegExp Record Fields
フィールド名 意味
[[IgnoreCase]] Boolean RegExpのフラグに "i" が現れるかどうかを示す
[[Multiline]] Boolean RegExpのフラグに "m" が現れるかどうかを示す
[[DotAll]] Boolean RegExpのフラグに "s" が現れるかどうかを示す
[[Unicode]] Boolean RegExpのフラグに "u" が現れるかどうかを示す
[[UnicodeSets]] Boolean RegExpのフラグに "v" が現れるかどうかを示す
[[CapturingGroupsCount]] 非負整数 RegExpのパターン内の左キャプチャ括弧の数

22.2.2.2 Runtime Semantics: CompilePattern

The syntax-directed operation CompilePattern takes argument regexpRecord (RegExp Record) and returns characterのListと非負整数を取り、MatchStateまたは failure のいずれかを返すAbstract Closure. It is defined piecewise over the following productions:

Pattern :: Disjunction
  1. m を、引数 regexpRecord および forward での DisjunctionCompileSubpattern とする。
  2. regexpRecordm を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (input, index) を持つ新しいAbstract Closureを返す:
    1. Assert: input はcharacterのListである。
    2. Assert: 0 ≤ indexinput 内の要素数。
    3. c を、何も捕捉せず、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
      1. Assert: yMatchStateである。
      2. y を返す。
    4. cap を、1から regexpRecord.[[CapturingGroupsCount]] までで添字付けされた、regexpRecord.[[CapturingGroupsCount]] 個の undefined 値から成るListとする。
    5. xMatchState { [[Input]]: input, [[EndIndex]]: index, [[Captures]]: cap } とする。
    6. m(x, c) を返す。
Note

PatternはAbstract Closure値へコンパイルされます。その後RegExpBuiltinExecは、この手続きをcharacterのListおよびそのList内のオフセットに適用し、パターンがList内のまさにそのオフセットから開始してマッチするかどうか、およびマッチする場合にキャプチャ括弧の値が何になるかを判定できます。22.2.2 のアルゴリズムは、パターンのコンパイルが SyntaxError 例外をスローし得るように設計されています。一方で、パターンがいったん正常にコンパイルされると、結果のAbstract ClosureをcharacterのList内のマッチ探索に適用することは例外をスローできません(メモリ不足など、どこでも発生し得る実装定義の例外を除く)。

22.2.2.3 Runtime Semantics: CompileSubpattern

The syntax-directed operation CompileSubpattern takes arguments regexpRecord (RegExp Record) and direction (forward または backward) and returns Matcher.

Note 1

この節は B.1.2.5 で修正されます。

It is defined piecewise over the following productions:

Disjunction :: Alternative | Disjunction
  1. m1 を、引数 regexpRecord および direction での AlternativeCompileSubpattern とする。
  2. m2 を、引数 regexpRecord および direction での DisjunctionCompileSubpattern とする。
  3. MatchTwoAlternatives(m1, m2) を返す。
Note 2

| 正規表現演算子は2つの選択肢を分離します。パターンはまず左の Alternative(その後に正規表現の後続部分が続く)をマッチしようとします。失敗した場合、右の Disjunction(その後に正規表現の後続部分が続く)をマッチしようとします。左の Alternative、右の Disjunction、および後続部分のすべてが選択点を持つ場合、左の Alternative の次の選択へ進む前に、後続部分のすべての選択が試されます。左の Alternative の選択が尽きた場合、左の Alternative の代わりに右の Disjunction が試されます。| によってスキップされたパターン部分内のキャプチャ括弧は、Stringではなく undefined 値を生成します。したがって、例えば、

/a|ab/.exec("abc")

"ab" ではなく "a" という結果を返します。さらに、

/((a)|(ab))((c)|(bc))/.exec("abc")

は次の配列を返し、

["abc", "a", "a", undefined, "bc", undefined, "bc"]

次の配列は返しません。

["abc", "ab", undefined, "ab", "c", "c", undefined]

2つの選択肢が試される順序は、direction の値に依存しません。

Alternative :: [empty]
  1. EmptyMatcher() を返す。
Alternative :: Alternative Term
  1. m1 を、引数 regexpRecord および direction での AlternativeCompileSubpattern とする。
  2. m2 を、引数 regexpRecord および direction での TermCompileSubpattern とする。
  3. MatchSequence(m1, m2, direction) を返す。
Note 3

連続する Term は、input の連続する部分を同時にマッチしようとします。directionforward の場合、左の Alternative、右の Term、および正規表現の後続部分のすべてが選択点を持つなら、右の Term の次の選択へ進む前に後続部分のすべての選択が試され、左の Alternative の次の選択へ進む前に右の Term のすべての選択が試されます。directionbackward の場合、AlternativeTerm の評価順序は逆になります。

Term :: Assertion
  1. 引数 regexpRecord での AssertionCompileAssertion を返す。
Note 4

結果のMatcherdirection に依存しません。

Term :: Atom
  1. 引数 regexpRecord および direction での AtomCompileAtom を返す。
Term :: Atom Quantifier
  1. m を、引数 regexpRecord および direction での AtomCompileAtom とする。
  2. qQuantifierCompileQuantifier とする。
  3. Assert: q.[[Min]]q.[[Max]]
  4. parenIndexCountLeftCapturingParensBefore(Term) とする。
  5. parenCountCountLeftCapturingParensWithin(Atom) とする。
  6. mqparenIndex、および parenCount を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (x, c) を持つ新しいMatcherを返す:
    1. Assert: xMatchStateである。
    2. Assert: cMatcherContinuationである。
    3. RepeatMatcher(m, q.[[Min]], q.[[Max]], q.[[Greedy]], x, c, parenIndex, parenCount) を返す。

22.2.2.3.1 RepeatMatcher ( m, min, max, greedy, matchState, continue, parenIndex, parenCount )

The abstract operation RepeatMatcher takes arguments m (Matcher), min (非負整数), max (非負整数または +∞), greedy (Boolean), matchState (MatchState), continue (MatcherContinuation), parenIndex (非負整数), and parenCount (非負整数) and returns MatchStateまたは failure. It performs the following steps when called:

  1. max = 0 の場合、continue(matchState) を返す。
  2. d を、mminmaxgreedymatchStatecontinueparenIndex、および parenCount を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
    1. Assert: yMatchStateである。
    2. min = 0 かつ y.[[EndIndex]] = matchState.[[EndIndex]] の場合、failure を返す。
    3. min = 0 の場合、min2 を 0 とする。そうでない場合、min2min - 1 とする。
    4. max = +∞ の場合、max2 を +∞ とする。そうでない場合、max2max - 1 とする。
    5. RepeatMatcher(m, min2, max2, greedy, y, continue, parenIndex, parenCount) を返す。
  3. capmatchState.[[Captures]] のコピーとする。
  4. parenIndex + 1 から parenIndex + parenCount までの包含区間内の各整数 k について、cap[k] を undefined に設定する。
  5. inputmatchState.[[Input]] とする。
  6. ematchState.[[EndIndex]] とする。
  7. xrMatchState { [[Input]]: input, [[EndIndex]]: e, [[Captures]]: cap } とする。
  8. min ≠ 0 の場合、m(xr, d) を返す。
  9. greedyfalse の場合、次を行う:
    1. zcontinue(matchState) とする。
    2. zfailure でない場合、z を返す。
    3. m(xr, d) を返す。
  10. zm(xr, d) とする。
  11. zfailure でない場合、z を返す。
  12. continue(matchState) を返す。
Note 1

Quantifier が後続する Atom は、Quantifier によって指定された回数だけ繰り返されます。Quantifier は非貪欲であることができ、その場合 Atom パターンは後続部分にマッチしつつ可能な限り少ない回数だけ繰り返されます。また貪欲であることもでき、その場合 Atom パターンは後続部分にマッチしつつ可能な限り多い回数だけ繰り返されます。繰り返されるのは、マッチした入力character列ではなく Atom パターンであるため、Atom の異なる繰り返しは異なる入力部分文字列にマッチできます。

Note 2

Atom と正規表現の後続部分のすべてが選択点を持つ場合、Atom はまず可能な限り多く(非貪欲なら可能な限り少なく)マッチされます。Atom の最後の繰り返しにおける次の選択へ進む前に、後続部分のすべての選択が試されます。Atom の最後(n番目)の繰り返しにおけるすべての選択は、Atom の最後から2番目(n - 1)番目の繰り返しにおける次の選択へ進む前に試されます。その時点で、Atom のより多い、またはより少ない繰り返しが今や可能であることが判明する場合があります。これらが(再び、可能な限り少ないか多いかのどちらかから始めて)尽くされてから、Atom の(n - 1)番目の繰り返しにおける次の選択へ進み、以下同様です。

次を比較してください:

/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のgcdを計算します:

"aaaaaaaaaa,aaaaaaaaaaaaaaa".replace(/^(a+)\1*,\1+$/, "$1")

これは単項表記でgcd "aaaaa" を返します。

Note 3

RepeatMatcherのステップ 4 は、Atom が繰り返されるたびに Atom のキャプチャをクリアします。この挙動は次の正規表現で確認できます。

/(z)((a+)?(b+)?(c))*/.exec("zaacbbbcac")

これは次の配列を返し、

["zaacbbbcac", "z", "ac", "a", undefined, "c"]

次の配列は返しません。

["zaacbbbcac", "z", "ac", "a", "bbb", "c"]

なぜなら、最外側の * の各反復が、量化された Atom に含まれるすべてのキャプチャStringをクリアし、この場合は番号2、3、4、および5のキャプチャStringが含まれるためです。

Note 4

RepeatMatcherのステップ 2.b は、最小繰り返し数が満たされた後、空のcharacter列にマッチする Atom のさらなる展開は、追加の繰り返しとして考慮されないことを述べています。これにより、正規表現エンジンが次のようなパターンで無限ループに陥ることを防ぎます:

/(a*)*/.exec("b")

または少し複雑な次のもの:

/(a*)b\1+/.exec("baaaac")

これは次の配列を返します:

["b", ""]

22.2.2.3.2 EmptyMatcher ( )

The abstract operation EmptyMatcher takes no arguments and returns Matcher. It performs the following steps when called:

  1. 何も捕捉せず、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. continue(matchState) を返す。

22.2.2.3.3 MatchTwoAlternatives ( m1, m2 )

The abstract operation MatchTwoAlternatives takes arguments m1 (Matcher) and m2 (Matcher) and returns Matcher. It performs the following steps when called:

  1. m1m2 を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. rm1(matchState, continue) とする。
    4. rfailure でない場合、r を返す。
    5. m2(matchState, continue) を返す。

22.2.2.3.4 MatchSequence ( m1, m2, direction )

The abstract operation MatchSequence takes arguments m1 (Matcher), m2 (Matcher), and direction (forward または backward) and returns Matcher. It performs the following steps when called:

  1. directionforward の場合、次を行う:
    1. m1m2 を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
      1. Assert: matchStateMatchStateである。
      2. Assert: continueMatcherContinuationである。
      3. d を、continuem2 を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
        1. Assert: yMatchStateである。
        2. m2(y, continue) を返す。
      4. m1(matchState, d) を返す。
  2. Assert: directionbackward である。
  3. m1m2 を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. d を、continuem1 を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
      1. Assert: yMatchStateである。
      2. m1(y, continue) を返す。
    4. m2(matchState, d) を返す。

22.2.2.4 Runtime Semantics: CompileAssertion

The syntax-directed operation CompileAssertion takes argument regexpRecord (RegExp Record) and returns Matcher.

Note 1

この節は B.1.2.6 で修正されます。

It is defined piecewise over the following productions:

Assertion :: ^
  1. regexpRecord を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. inputmatchState.[[Input]] とする。
    4. ematchState.[[EndIndex]] とする。
    5. e = 0 であるか、または regexpRecord.[[Multiline]]true でありcharacter input[e - 1] が LineTerminator によってマッチされる場合、次を行う:
      1. continue(matchState) を返す。
    6. failure を返す。
Note 2

パターンで y フラグが使用されている場合でも、^ は常に input の先頭、または(regexpRecord.[[Multiline]]true の場合)行の先頭にのみマッチします。

Assertion :: $
  1. regexpRecord を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. inputmatchState.[[Input]] とする。
    4. ematchState.[[EndIndex]] とする。
    5. inputLengthinput 内の要素数とする。
    6. e = inputLength であるか、または regexpRecord.[[Multiline]]true でありcharacter input[e] が LineTerminator によってマッチされる場合、次を行う:
      1. continue(matchState) を返す。
    7. failure を返す。
Assertion :: \b
  1. regexpRecord を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. inputmatchState.[[Input]] とする。
    4. ematchState.[[EndIndex]] とする。
    5. aIsWordChar(regexpRecord, input, e - 1) とする。
    6. bIsWordChar(regexpRecord, input, e) とする。
    7. atrue かつ bfalse である場合、または afalse かつ btrue である場合、continue(matchState) を返す。
    8. failure を返す。
Assertion :: \B
  1. regexpRecord を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. inputmatchState.[[Input]] とする。
    4. ematchState.[[EndIndex]] とする。
    5. aIsWordChar(regexpRecord, input, e - 1) とする。
    6. bIsWordChar(regexpRecord, input, e) とする。
    7. atrue かつ btrue である場合、または afalse かつ bfalse である場合、continue(matchState) を返す。
    8. failure を返す。
Assertion :: (?= Disjunction )
  1. m を、引数 regexpRecord および forward での DisjunctionCompileSubpattern とする。
  2. m を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. d を、何も捕捉せず、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
      1. Assert: yMatchStateである。
      2. y を返す。
    4. rm(matchState, d) とする。
    5. rfailure である場合、failure を返す。
    6. Assert: rMatchStateである。
    7. capr.[[Captures]] とする。
    8. inputmatchState.[[Input]] とする。
    9. xematchState.[[EndIndex]] とする。
    10. zMatchState { [[Input]]: input, [[EndIndex]]: xe, [[Captures]]: cap } とする。
    11. continue(z) を返す。
Note 3

形式 (?= Disjunction ) はゼロ幅の肯定先読みを指定します。これが成功するためには、Disjunction 内のパターンが現在位置でマッチしなければなりませんが、後続部分をマッチする前に現在位置は進められません。Disjunction が現在位置で複数の方法でマッチできる場合、最初のものだけが試されます。他の正規表現演算子とは異なり、(?= 形式へのバックトラッキングはありません(この通常とは異なる挙動はPerlから継承されています)。これは、Disjunction がキャプチャ括弧を含み、パターンの後続部分がそれらのキャプチャへの後方参照を含む場合にのみ問題になります。

例えば、

/(?=(a+))/.exec("baaabac")

は最初の b の直後の空Stringにマッチし、そのため次の配列を返します:

["", "aaa"]

先読みへのバックトラッキングが存在しないことを示すため、次を考えてください:

/(?=(a+))a*b\1/.exec("baaabac")

この式は次を返し、

["aba", "a"]

次は返しません:

["aaaba", "a"]
Assertion :: (?! Disjunction )
  1. m を、引数 regexpRecord および forward での DisjunctionCompileSubpattern とする。
  2. m を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. d を、何も捕捉せず、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
      1. Assert: yMatchStateである。
      2. y を返す。
    4. rm(matchState, d) とする。
    5. rfailure でない場合、failure を返す。
    6. continue(matchState) を返す。
Note 4

形式 (?! Disjunction ) はゼロ幅の否定先読みを指定します。これが成功するためには、Disjunction 内のパターンが現在位置でマッチに失敗しなければなりません。後続部分をマッチする前に現在位置は進められません。Disjunction はキャプチャ括弧を含むことができますが、それらへの後方参照は Disjunction 自体の内部からのみ意味を持ちます。パターン内の他の場所からこれらのキャプチャ括弧への後方参照は、否定先読みがパターン成功のためには失敗しなければならないため、常に undefined を返します。例えば、

/(.*?)a(?!(a+)b\2c)\2(.*)/.exec("baaabaac")

は、正の数 n 個の ab、別の n 個の a(最初の \2 で指定される)、および c が直後に続かない a を探します。2番目の \2 は否定先読みの外側にあるため、undefined に対してマッチし、そのため常に成功します。式全体は次の配列を返します:

["baaabaac", "ba", undefined, "abaac"]
Assertion :: (?<= Disjunction )
  1. m を、引数 regexpRecord および backward での DisjunctionCompileSubpattern とする。
  2. m を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. d を、何も捕捉せず、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
      1. Assert: yMatchStateである。
      2. y を返す。
    4. rm(matchState, d) とする。
    5. rfailure である場合、failure を返す。
    6. Assert: rMatchStateである。
    7. capr.[[Captures]] とする。
    8. inputmatchState.[[Input]] とする。
    9. xematchState.[[EndIndex]] とする。
    10. zMatchState { [[Input]]: input, [[EndIndex]]: xe, [[Captures]]: cap } とする。
    11. continue(z) を返す。
Assertion :: (?<! Disjunction )
  1. m を、引数 regexpRecord および backward での DisjunctionCompileSubpattern とする。
  2. m を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (matchState, continue) を持つ新しいMatcherを返す:
    1. Assert: matchStateMatchStateである。
    2. Assert: continueMatcherContinuationである。
    3. d を、何も捕捉せず、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
      1. Assert: yMatchStateである。
      2. y を返す。
    4. rm(matchState, d) とする。
    5. rfailure でない場合、failure を返す。
    6. continue(matchState) を返す。

22.2.2.4.1 IsWordChar ( regexpRecord, input, e )

The abstract operation IsWordChar takes arguments regexpRecord (RegExp Record), input (characterのList), and e (整数) and returns Boolean. It performs the following steps when called:

  1. inputLengthinput 内の要素数とする。
  2. e = -1 または e = inputLength の場合、false を返す。
  3. c をcharacter input[e] とする。
  4. WordCharacters(regexpRecord) が c を含む場合、true を返す。
  5. false を返す。

22.2.2.5 Runtime Semantics: CompileQuantifier

The syntax-directed operation CompileQuantifier takes no arguments and returns フィールド [[Min]](非負整数)、[[Max]](非負整数または +∞)、および [[Greedy]](Boolean)を持つRecord. It is defined piecewise over the following productions:

Quantifier :: QuantifierPrefix
  1. qpQuantifierPrefixCompileQuantifierPrefix とする。
  2. Record { [[Min]]: qp.[[Min]], [[Max]]: qp.[[Max]], [[Greedy]]: true } を返す。
Quantifier :: QuantifierPrefix ?
  1. qpQuantifierPrefixCompileQuantifierPrefix とする。
  2. Record { [[Min]]: qp.[[Min]], [[Max]]: qp.[[Max]], [[Greedy]]: false } を返す。

22.2.2.6 Runtime Semantics: CompileQuantifierPrefix

The syntax-directed operation CompileQuantifierPrefix takes no arguments and returns フィールド [[Min]](非負整数)および [[Max]](非負整数または +∞)を持つRecord. It is defined piecewise over the following productions:

QuantifierPrefix :: *
  1. Record { [[Min]]: 0, [[Max]]: +∞ } を返す。
QuantifierPrefix :: +
  1. Record { [[Min]]: 1, [[Max]]: +∞ } を返す。
QuantifierPrefix :: ?
  1. Record { [[Min]]: 0, [[Max]]: 1 } を返す。
QuantifierPrefix :: { DecimalDigits }
  1. iDecimalDigits のMV(12.9.3 を参照)とする。
  2. Record { [[Min]]: i, [[Max]]: i } を返す。
QuantifierPrefix :: { DecimalDigits ,}
  1. iDecimalDigits のMVとする。
  2. Record { [[Min]]: i, [[Max]]: +∞ } を返す。
QuantifierPrefix :: { DecimalDigits , DecimalDigits }
  1. i を最初の DecimalDigits のMVとする。
  2. j を2番目の DecimalDigits のMVとする。
  3. Record { [[Min]]: i, [[Max]]: j } を返す。

22.2.2.7 Runtime Semantics: CompileAtom

The syntax-directed operation CompileAtom takes arguments regexpRecord (RegExp Record) and direction (forward または backward) and returns Matcher.

Note 1

この節は B.1.2.7 で修正されます。

It is defined piecewise over the following productions:

Atom :: PatternCharacter
  1. chPatternCharacter に一致したcharacterとする。
  2. charSet をcharacter ch を含む1要素のCharSetとする。
  3. CharacterSetMatcher(regexpRecord, charSet, false, direction) を返す。
Atom :: .
  1. charSetAllCharacters(regexpRecord) とする。
  2. regexpRecord.[[DotAll]]true でない場合、次を行う:
    1. LineTerminator 生成式の右辺のコードポイントに対応するすべてのcharacterを charSet から除去する。
  3. CharacterSetMatcher(regexpRecord, charSet, false, direction) を返す。
Atom :: CharacterClass
  1. cc を、引数 regexpRecord での CharacterClassCompileCharacterClass とする。
  2. cscc.[[CharSet]] とする。
  3. regexpRecord.[[UnicodeSets]]false であるか、または cs のすべてのCharSetElementが単一のcharacterから成る場合(cs が空の場合を含む)、CharacterSetMatcher(regexpRecord, cs, cc.[[Invert]], direction) を返す。
  4. Assert: cc.[[Invert]]false である。
  5. lm を空のMatcherListとする。
  6. 複数のcharacterを含む cs 内の各CharSetElement s について、長さの降順に反復して、次を行う:
    1. cs2s の最後のコードポイントを含む1要素のCharSetとする。
    2. m2CharacterSetMatcher(regexpRecord, cs2, false, direction) とする。
    3. s 内の各コードポイント c1 について、その最後から2番目のコードポイントから後方に反復して、次を行う:
      1. cs1c1 を含む1要素のCharSetとする。
      2. m1CharacterSetMatcher(regexpRecord, cs1, false, direction) とする。
      3. m2MatchSequence(m1, m2, direction) に設定する。
    4. m2lm に追加する。
  7. singles を、単一のcharacterから成る cs のすべてのCharSetElementを含むCharSetとする。
  8. CharacterSetMatcher(regexpRecord, singles, false, direction) を lm に追加する。
  9. cs が空のcharacter列を含む場合、EmptyMatcher() を lm に追加する。
  10. m2lm 内の最後のMatcherとする。
  11. lm の各Matcher m1 について、その最後から2番目の要素から後方に反復して、次を行う:
    1. m2MatchTwoAlternatives(m1, m2) に設定する。
  12. m2 を返す。
Atom :: ( GroupSpecifieropt Disjunction )
  1. m を、引数 regexpRecord および direction での DisjunctionCompileSubpattern とする。
  2. parenIndexCountLeftCapturingParensBefore(Atom) とする。
  3. directionm、および parenIndex を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (x, c) を持つ新しいMatcherを返す:
    1. Assert: xMatchStateである。
    2. Assert: cMatcherContinuationである。
    3. d を、xcdirection、および parenIndex を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (y) を持つ新しいMatcherContinuationとする:
      1. Assert: yMatchStateである。
      2. capy.[[Captures]] のコピーとする。
      3. inputx.[[Input]] とする。
      4. xex.[[EndIndex]] とする。
      5. yey.[[EndIndex]] とする。
      6. directionforward の場合、次を行う:
        1. Assert: xeye
        2. rCaptureRange { [[StartIndex]]: xe, [[EndIndex]]: ye } とする。
      7. それ以外の場合、
        1. Assert: directionbackward である。
        2. Assert: yexe
        3. rCaptureRange { [[StartIndex]]: ye, [[EndIndex]]: xe } とする。
      8. cap[parenIndex + 1] を r に設定する。
      9. zMatchState { [[Input]]: input, [[EndIndex]]: ye, [[Captures]]: cap } とする。
      10. c(z) を返す。
    4. m(x, d) を返す。
Note 2

( Disjunction ) 形式の括弧は、Disjunction パターンの構成要素をまとめることと、マッチ結果を保存することの両方の役割を果たします。その結果は、後方参照(\ の後に0でない10進数が続くもの)、置換String内の参照、または正規表現マッチングAbstract Closureから返される配列の一部として使用できます。括弧のキャプチャ挙動を抑制するには、代わりに (?: Disjunction ) 形式を使用します。

Atom :: (? RegularExpressionModifiers : Disjunction )
  1. addModifiersRegularExpressionModifiers に一致したソーステキストとする。
  2. removeModifiers を空のStringとする。
  3. modifiedRerUpdateModifiers(regexpRecord, CodePointsToString(addModifiers), removeModifiers) とする。
  4. 引数 modifiedRer および direction での DisjunctionCompileSubpattern を返す。
Atom :: (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction )
  1. addModifiers を最初の RegularExpressionModifiers に一致したソーステキストとする。
  2. removeModifiers を2番目の RegularExpressionModifiers に一致したソーステキストとする。
  3. modifiedRerUpdateModifiers(regexpRecord, CodePointsToString(addModifiers), CodePointsToString(removeModifiers)) とする。
  4. 引数 modifiedRer および direction での DisjunctionCompileSubpattern を返す。
AtomEscape :: DecimalEscape
  1. nDecimalEscapeCapturingGroupNumberとする。
  2. Assert: nregexpRecord.[[CapturingGroupsCount]]
  3. BackreferenceMatcher(regexpRecord, « n », direction) を返す。
Note 3

\ の後に0でない10進数 n が続く形式のエスケープ列は、n番目 のキャプチャ括弧集合の結果(22.2.2.1)にマッチします。正規表現のキャプチャ括弧が n 個未満である場合はエラーです。正規表現が n 個以上のキャプチャ括弧を持っていても、n番目 の括弧が何もキャプチャしていないため undefined である場合、後方参照は常に成功します。

AtomEscape :: CharacterEscape
  1. cvCharacterEscapeCharacterValueとする。
  2. ch をcharacter valueが cv であるcharacterとする。
  3. charSet をcharacter ch を含む1要素のCharSetとする。
  4. CharacterSetMatcher(regexpRecord, charSet, false, direction) を返す。
AtomEscape :: CharacterClassEscape
  1. cs を、引数 regexpRecord での CharacterClassEscapeCompileToCharSet とする。
  2. regexpRecord.[[UnicodeSets]]false であるか、または cs のすべてのCharSetElementが単一のcharacterから成る場合(cs が空の場合を含む)、CharacterSetMatcher(regexpRecord, cs, false, direction) を返す。
  3. lm を空のMatcherListとする。
  4. 複数のcharacterを含む cs 内の各CharSetElement s について、長さの降順に反復して、次を行う:
    1. cs2s の最後のコードポイントを含む1要素のCharSetとする。
    2. m2CharacterSetMatcher(regexpRecord, cs2, false, direction) とする。
    3. s 内の各コードポイント c1 について、その最後から2番目のコードポイントから後方に反復して、次を行う:
      1. cs1c1 を含む1要素のCharSetとする。
      2. m1CharacterSetMatcher(regexpRecord, cs1, false, direction) とする。
      3. m2MatchSequence(m1, m2, direction) に設定する。
    4. m2lm に追加する。
  5. singles を、単一のcharacterから成る cs のすべてのCharSetElementを含むCharSetとする。
  6. CharacterSetMatcher(regexpRecord, singles, false, direction) を lm に追加する。
  7. cs が空のcharacter列を含む場合、EmptyMatcher() を lm に追加する。
  8. m2lm 内の最後のMatcherとする。
  9. lm の各Matcher m1 について、その最後から2番目の要素から後方に反復して、次を行う:
    1. m2MatchTwoAlternatives(m1, m2) に設定する。
  10. m2 を返す。
AtomEscape :: k GroupName
  1. matchingGroupSpecifiersGroupSpecifiersThatMatch(GroupName) とする。
  2. parenIndices を新しい空のListとする。
  3. matchingGroupSpecifiers の各 GroupSpecifier groupSpecifier について、次を行う:
    1. parenIndexCountLeftCapturingParensBefore(groupSpecifier) とする。
    2. parenIndexparenIndices に追加する。
  4. BackreferenceMatcher(regexpRecord, parenIndices, direction) を返す。

22.2.2.7.1 CharacterSetMatcher ( regexpRecord, charSet, invert, direction )

The abstract operation CharacterSetMatcher takes arguments regexpRecord (RegExp Record), charSet (CharSet), invert (Boolean), and direction (forward または backward) and returns Matcher. It performs the following steps when called:

  1. regexpRecord.[[UnicodeSets]]true の場合、次を行う:
    1. Assert: invertfalse である。
    2. Assert: charSet のすべてのCharSetElementは単一のcharacterから成る。
  2. regexpRecordcharSetinvert、および direction を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (x, c) を持つ新しいMatcherを返す:
    1. Assert: xMatchStateである。
    2. Assert: cMatcherContinuationである。
    3. inputx.[[Input]] とする。
    4. endIndexx.[[EndIndex]] とする。
    5. directionforward の場合、fendIndex + 1 とする。
    6. それ以外の場合、fendIndex - 1 とする。
    7. inputLengthinput 内の要素数とする。
    8. f < 0 または f > inputLength の場合、failure を返す。
    9. indexmin(endIndex, f) とする。
    10. ch をcharacter input[index] とする。
    11. ccCanonicalize(regexpRecord, ch) とする。
    12. Canonicalize(regexpRecord, a) が cc であるような、ちょうど1つのcharacter a を含むCharSetElementcharSet 内に存在する場合、foundtrue とする。そうでない場合、foundfalse とする。
    13. invertfalse かつ foundfalse の場合、failure を返す。
    14. inverttrue かつ foundtrue の場合、failure を返す。
    15. capx.[[Captures]] とする。
    16. yMatchState { [[Input]]: input, [[EndIndex]]: f, [[Captures]]: cap } とする。
    17. c(y) を返す。

22.2.2.7.2 BackreferenceMatcher ( regexpRecord, ns, direction )

The abstract operation BackreferenceMatcher takes arguments regexpRecord (RegExp Record), ns (正整数のList), and direction (forward または backward) and returns Matcher. It performs the following steps when called:

  1. regexpRecordns、および direction を捕捉し、呼び出されたときに次の手順を実行する、パラメーター (x, c) を持つ新しいMatcherを返す:
    1. Assert: xMatchStateである。
    2. Assert: cMatcherContinuationである。
    3. inputx.[[Input]] とする。
    4. capx.[[Captures]] とする。
    5. rundefined とする。
    6. ns の各整数 n について、次を行う:
      1. cap[n] が undefined でない場合、次を行う:
        1. Assert: rundefined である。
        2. rcap[n] に設定する。
    7. rundefined である場合、c(x) を返す。
    8. endIndexx.[[EndIndex]] とする。
    9. rsr.[[StartIndex]] とする。
    10. rer.[[EndIndex]] とする。
    11. lenre - rs とする。
    12. directionforward の場合、fendIndex + len とする。
    13. それ以外の場合、fendIndex - len とする。
    14. inputLengthinput 内の要素数とする。
    15. f < 0 または f > inputLength の場合、failure を返す。
    16. gmin(endIndex, f) とする。
    17. 0(包含)から len(排他)までの区間内に、Canonicalize(regexpRecord, input[rs + i]) が Canonicalize(regexpRecord, input[g + i]) でないような整数 i が存在する場合、failure を返す。
    18. yMatchState { [[Input]]: input, [[EndIndex]]: f, [[Captures]]: cap } とする。
    19. c(y) を返す。

22.2.2.7.3 Canonicalize ( regexpRecord, ch )

The abstract operation Canonicalize takes arguments regexpRecord (RegExp Record) and ch (character) and returns character. It performs the following steps when called:

  1. HasEitherUnicodeFlag(regexpRecord) が true かつ regexpRecord.[[IgnoreCase]]true の場合、次を行う:
    1. Unicode Character Databaseのファイル CaseFolding.txtch に対するsimpleまたはcommon case foldingマッピングを提供する場合、そのマッピングを ch に適用した結果を返す。
    2. ch を返す。
  2. regexpRecord.[[IgnoreCase]]false の場合、ch を返す。
  3. Assert: ch はUTF-16コード単位である。
  4. cp を、数値が ch の数値であるコードポイントとする。
  5. u を、Unicode Default Case Conversionアルゴリズムに従う toUppercase(« cp ») とする。
  6. uStrCodePointsToString(u) とする。
  7. uStr の長さが 1 でない場合、ch を返す。
  8. cuuStr の単一コード単位要素とする。
  9. ch の数値が 128 以上で、かつ cu の数値が 128 未満の場合、ch を返す。
  10. cu を返す。
Note

HasEitherUnicodeFlag(regexpRecord) が true の場合の大小文字を区別しないマッチでは、すべてのcharacterは比較される直前にUnicode Standardが提供するsimple mappingを用いて暗黙的にcase-foldされます。simple mappingは常に単一のコードポイントへ写像するため、例えば ß(U+00DF LATIN SMALL LETTER SHARP S)を ss または SS へ写像しません。ただし、Basic Latinブロック外のコードポイントをその内部のコードポイントへ写像する場合があります。例えば、ſ(U+017F LATIN SMALL LETTER LONG S)は s(U+0073 LATIN SMALL LETTER S)へcase-foldされ、(U+212A KELVIN SIGN)は k(U+006B LATIN SMALL LETTER K)へcase-foldされます。これらのコードポイントを含むStringは、/[a-z]/ui のような正規表現によってマッチされます。

HasEitherUnicodeFlag(regexpRecord) が false の場合の大小文字を区別しないマッチでは、マッピングはtoCasefoldではなくUnicode Default Case ConversionアルゴリズムtoUppercaseに基づくため、いくつかの微妙な差異が生じます。例えば、(U+2126 OHM SIGN)はtoUppercaseではそれ自身へ写像されますが、toCasefoldでは Ω(U+03A9 GREEK CAPITAL LETTER OMEGA)とともに ω(U+03C9 GREEK SMALL LETTER OMEGA)へ写像されます。そのため "\u2126"/[ω]/ui および /[\u03A9]/ui にはマッチしますが、/[ω]/i または /[\u03A9]/i にはマッチしません。また、Basic Latinブロック外のコードポイントはその内部のコードポイントへ写像されないため、"\u017F ſ""\u212A K" のようなStringは /[a-z]/i にマッチしません。

22.2.2.7.4 UpdateModifiers ( regexpRecord, add, remove )

The abstract operation UpdateModifiers takes arguments regexpRecord (RegExp Record), add (String), and remove (String) and returns RegExp Record. It performs the following steps when called:

  1. Assert: addremove は共通の要素を持たない。
  2. ignoreCaseregexpRecord.[[IgnoreCase]] とする。
  3. multilineregexpRecord.[[Multiline]] とする。
  4. dotAllregexpRecord.[[DotAll]] とする。
  5. unicoderegexpRecord.[[Unicode]] とする。
  6. unicodeSetsregexpRecord.[[UnicodeSets]] とする。
  7. capturingGroupsCountregexpRecord.[[CapturingGroupsCount]] とする。
  8. remove"i" を含む場合、ignoreCasefalse に設定する。
  9. そうでなく add"i" を含む場合、ignoreCasetrue に設定する。
  10. remove"m" を含む場合、multilinefalse に設定する。
  11. そうでなく add"m" を含む場合、multilinetrue に設定する。
  12. remove"s" を含む場合、dotAllfalse に設定する。
  13. そうでなく add"s" を含む場合、dotAlltrue に設定する。
  14. RegExp Record { [[IgnoreCase]]: ignoreCase, [[Multiline]]: multiline, [[DotAll]]: dotAll, [[Unicode]]: unicode, [[UnicodeSets]]: unicodeSets, [[CapturingGroupsCount]]: capturingGroupsCount } を返す。

22.2.2.8 Runtime Semantics: CompileCharacterClass

The syntax-directed operation CompileCharacterClass takes argument regexpRecord (RegExp Record) and returns フィールド [[CharSet]]CharSet)および [[Invert]](Boolean)を持つRecord. It is defined piecewise over the following productions:

CharacterClass :: [ ClassContents ]
  1. charSet を、引数 regexpRecord での ClassContentsCompileToCharSet とする。
  2. Record { [[CharSet]]: charSet, [[Invert]]: false } を返す。
CharacterClass :: [^ ClassContents ]
  1. charSet を、引数 regexpRecord での ClassContentsCompileToCharSet とする。
  2. regexpRecord.[[UnicodeSets]]true の場合、次を行う:
    1. Record { [[CharSet]]: CharacterComplement(regexpRecord, charSet), [[Invert]]: false } を返す。
  3. Record { [[CharSet]]: charSet, [[Invert]]: true } を返す。

22.2.2.9 Runtime Semantics: CompileToCharSet

The syntax-directed operation CompileToCharSet takes argument regexpRecord (RegExp Record) and returns CharSet.

Note 1

この節は B.1.2.8 で修正されます。

It is defined piecewise over the following productions:

ClassContents :: [empty]
  1. 空のCharSetを返す。
NonemptyClassRanges :: ClassAtom NonemptyClassRangesNoDash
  1. charSet を、引数 regexpRecord での ClassAtomCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での NonemptyClassRangesNoDashCompileToCharSet とする。
  3. CharSet charSetotherSet の和集合を返す。
NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents
  1. charSet を、引数 regexpRecord での最初の ClassAtomCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での2番目の ClassAtomCompileToCharSet とする。
  3. remainingSet を、引数 regexpRecord での ClassContentsCompileToCharSet とする。
  4. rangeSetCharacterRange(charSet, otherSet) とする。
  5. rangeSetremainingSet の和集合を返す。
NonemptyClassRangesNoDash :: ClassAtomNoDash NonemptyClassRangesNoDash
  1. charSet を、引数 regexpRecord での ClassAtomNoDashCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での NonemptyClassRangesNoDashCompileToCharSet とする。
  3. CharSet charSetotherSet の和集合を返す。
NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents
  1. charSet を、引数 regexpRecord での ClassAtomNoDashCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での ClassAtomCompileToCharSet とする。
  3. remainingSet を、引数 regexpRecord での ClassContentsCompileToCharSet とする。
  4. rangeSetCharacterRange(charSet, otherSet) とする。
  5. rangeSetremainingSet の和集合を返す。
Note 2

ClassContents は、単一の ClassAtom および/またはダッシュで区切られた2つの ClassAtom の範囲へ展開できます。後者の場合、ClassContents は最初の ClassAtom と2番目の ClassAtom の間のすべてのcharacterを包含的に含みます。いずれかの ClassAtom が単一のcharacterを表さない場合(例えば一方が \w である場合)、または最初の ClassAtom のcharacter valueが2番目の ClassAtom のcharacter valueより厳密に大きい場合、エラーが発生します。

Note 3

パターンが大小文字を無視する場合でも、範囲の両端の大小文字は、どのcharacterがその範囲に属するかを決定する際に重要です。したがって、例えばパターン /[E-F]/i は文字 EFe、および f のみにマッチしますが、パターン /[E-f]/i はUnicode Basic Latinブロック内のすべての大文字および小文字に加え、記号 [, \, ], ^, _, および ` にもマッチします。

Note 4

- characterはリテラルとして扱われることも、範囲を示すこともできます。ClassContents の最初または最後のcharacterである場合、範囲指定の開始または終了の限界である場合、または範囲指定の直後に続く場合、これはリテラルとして扱われます。

ClassAtom :: -
  1. 単一のcharacter - U+002D(HYPHEN-MINUS)を含むCharSetを返す。
ClassAtomNoDash :: SourceCharacter but not one of \ or ] or -
  1. SourceCharacter に一致したcharacterを含むCharSetを返す。
ClassEscape :: b - CharacterEscape
  1. cv をこの ClassEscapeCharacterValueとする。
  2. c をcharacter valueが cv であるcharacterとする。
  3. 単一のcharacter c を含むCharSetを返す。
Note 5

ClassAtom は、\b\B、および後方参照を除き、正規表現の他の部分で許される任意のエスケープ列を使用できます。CharacterClass の内側では、\b はバックスペースcharacterを意味し、\B および後方参照はエラーを発生させます。ClassAtom の内側で後方参照を使用するとエラーになります。

CharacterClassEscape :: d
  1. character 012345678、および 9 を含む10要素のCharSetを返す。
CharacterClassEscape :: D
  1. charSet CharacterClassEscape :: d によって返されるCharSetとする。
  2. CharacterComplement(regexpRecord, charSet) を返す。
CharacterClassEscape :: s
  1. WhiteSpace または LineTerminator 生成式の右辺のコードポイントに対応するすべてのcharacterを含むCharSetを返す。
CharacterClassEscape :: S
  1. charSet CharacterClassEscape :: s によって返されるCharSetとする。
  2. CharacterComplement(regexpRecord, charSet) を返す。
CharacterClassEscape :: w
  1. MaybeSimpleCaseFolding(regexpRecord, WordCharacters(regexpRecord)) を返す。
CharacterClassEscape :: W
  1. charSet CharacterClassEscape :: w によって返されるCharSetとする。
  2. CharacterComplement(regexpRecord, charSet) を返す。
CharacterClassEscape :: p{ UnicodePropertyValueExpression }
  1. 引数 regexpRecord での UnicodePropertyValueExpressionCompileToCharSet を返す。
CharacterClassEscape :: P{ UnicodePropertyValueExpression }
  1. charSet を、引数 regexpRecord での UnicodePropertyValueExpressionCompileToCharSet とする。
  2. Assert: charSet は単一コードポイントのみを含む。
  3. CharacterComplement(regexpRecord, charSet) を返す。
UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue
  1. psUnicodePropertyName に一致したソーステキストとする。
  2. pUnicodeMatchProperty(regexpRecord, ps) とする。
  3. Assert: pTable 64 の「Property name and aliases」列に列挙されているUnicodeプロパティ名またはプロパティ別名である。
  4. vsUnicodePropertyValue に一致したソーステキストとする。
  5. vUnicodeMatchPropertyValue(p, vs) とする。
  6. charSet を、character database定義が値 v を持つプロパティ p を含む、すべてのUnicodeコードポイントを含むCharSetとする。
  7. MaybeSimpleCaseFolding(regexpRecord, charSet) を返す。
UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue
  1. sLoneUnicodePropertyNameOrValue に一致したソーステキストとする。
  2. UnicodeMatchPropertyValue(General_Category, s) が、PropertyValueAliases.txt に列挙されているGeneral_Category(gc)プロパティのUnicodeプロパティ値またはプロパティ値別名である場合、次を行う:
    1. character database定義が値 s を持つプロパティ“General_Category”を含む、すべてのUnicodeコードポイントを含むCharSetを返す。
  3. pUnicodeMatchProperty(regexpRecord, s) とする。
  4. Assert: p は、Table 65 の「Property name and aliases」列に列挙されている二値Unicodeプロパティまたは二値プロパティ別名、または Table 66 の「Property name」列に列挙されている文字列の二値Unicodeプロパティである。
  5. charSet を、character database定義が値“True”を持つプロパティ p を含む、すべてのCharSetElementを含むCharSetとする。
  6. MaybeSimpleCaseFolding(regexpRecord, charSet) を返す。
ClassUnion :: ClassSetRange ClassUnionopt
  1. charSet を、引数 regexpRecord での ClassSetRangeCompileToCharSet とする。
  2. ClassUnion が存在する場合、次を行う:
    1. otherSet を、引数 regexpRecord での ClassUnionCompileToCharSet とする。
    2. CharSet charSetotherSet の和集合を返す。
  3. charSet を返す。
ClassUnion :: ClassSetOperand ClassUnionopt
  1. charSet を、引数 regexpRecord での ClassSetOperandCompileToCharSet とする。
  2. ClassUnion が存在する場合、次を行う:
    1. otherSet を、引数 regexpRecord での ClassUnionCompileToCharSet とする。
    2. CharSet charSetotherSet の和集合を返す。
  3. charSet を返す。
ClassIntersection :: ClassSetOperand && ClassSetOperand
  1. charSet を、引数 regexpRecord での最初の ClassSetOperandCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での2番目の ClassSetOperandCompileToCharSet とする。
  3. CharSet charSetotherSet の共通部分を返す。
ClassIntersection :: ClassIntersection && ClassSetOperand
  1. charSet を、引数 regexpRecord での ClassIntersectionCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での ClassSetOperandCompileToCharSet とする。
  3. CharSet charSetotherSet の共通部分を返す。
ClassSubtraction :: ClassSetOperand -- ClassSetOperand
  1. charSet を、引数 regexpRecord での最初の ClassSetOperandCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での2番目の ClassSetOperandCompileToCharSet とする。
  3. charSetCharSetElementのうち、otherSetCharSetElementでもあるものを除いたCharSetを返す。
ClassSubtraction :: ClassSubtraction -- ClassSetOperand
  1. charSet を、引数 regexpRecord での ClassSubtractionCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での ClassSetOperandCompileToCharSet とする。
  3. charSetCharSetElementのうち、otherSetCharSetElementでもあるものを除いたCharSetを返す。
ClassSetRange :: ClassSetCharacter - ClassSetCharacter
  1. charSet を、引数 regexpRecord での最初の ClassSetCharacterCompileToCharSet とする。
  2. otherSet を、引数 regexpRecord での2番目の ClassSetCharacterCompileToCharSet とする。
  3. MaybeSimpleCaseFolding(regexpRecord, CharacterRange(charSet, otherSet)) を返す。
Note 6

結果はしばしば2つ以上の範囲から成ります。UnicodeSetsが true かつIgnoreCaseが true の場合、MaybeSimpleCaseFolding(regexpRecord, [Ā-č]) はその範囲の奇数番号のコードポイントのみを含みます。

ClassSetOperand :: ClassSetCharacter
  1. charSet を、引数 regexpRecord での ClassSetCharacterCompileToCharSet とする。
  2. MaybeSimpleCaseFolding(regexpRecord, charSet) を返す。
ClassSetOperand :: ClassStringDisjunction
  1. charSet を、引数 regexpRecord での ClassStringDisjunctionCompileToCharSet とする。
  2. MaybeSimpleCaseFolding(regexpRecord, charSet) を返す。
ClassSetOperand :: NestedClass
  1. 引数 regexpRecord での NestedClassCompileToCharSet を返す。
NestedClass :: [ ClassContents ]
  1. 引数 regexpRecord での ClassContentsCompileToCharSet を返す。
NestedClass :: [^ ClassContents ]
  1. charSet を、引数 regexpRecord での ClassContentsCompileToCharSet とする。
  2. CharacterComplement(regexpRecord, charSet) を返す。
NestedClass :: \ CharacterClassEscape
  1. 引数 regexpRecord での CharacterClassEscapeCompileToCharSet を返す。
ClassStringDisjunction :: \q{ ClassStringDisjunctionContents }
  1. 引数 regexpRecord での ClassStringDisjunctionContentsCompileToCharSet を返す。
ClassStringDisjunctionContents :: ClassString
  1. s を、引数 regexpRecord での ClassStringCompileClassSetString とする。
  2. 1つの文字列 s を含むCharSetを返す。
ClassStringDisjunctionContents :: ClassString | ClassStringDisjunctionContents
  1. s を、引数 regexpRecord での ClassStringCompileClassSetString とする。
  2. charSet を1つの文字列 s を含むCharSetとする。
  3. otherSet を、引数 regexpRecord での ClassStringDisjunctionContentsCompileToCharSet とする。
  4. CharSet charSetotherSet の和集合を返す。
ClassSetCharacter :: SourceCharacter but not ClassSetSyntaxCharacter \ CharacterEscape \ ClassSetReservedPunctuator
  1. cv をこの ClassSetCharacterCharacterValueとする。
  2. c をcharacter valueが cv であるcharacterとする。
  3. 単一のcharacter c を含むCharSetを返す。
ClassSetCharacter :: \b
  1. 単一のcharacter U+0008(BACKSPACE)を含むCharSetを返す。

22.2.2.9.1 CharacterRange ( charSet, otherSet )

The abstract operation CharacterRange takes arguments charSet (CharSet) and otherSet (CharSet) and returns CharSet. It performs the following steps when called:

  1. Assert: charSetotherSet はそれぞれちょうど1つのcharacterを含む。
  2. aCharSet charSet 内の1つのcharacterとする。
  3. bCharSet otherSet 内の1つのcharacterとする。
  4. i をcharacter a のcharacter valueとする。
  5. j をcharacter b のcharacter valueとする。
  6. Assert: ij
  7. i から j までの包含区間内のcharacter valueを持つすべてのcharacterを含むCharSetを返す。

22.2.2.9.2 HasEitherUnicodeFlag ( regexpRecord )

The abstract operation HasEitherUnicodeFlag takes argument regexpRecord (RegExp Record) and returns Boolean. It performs the following steps when called:

  1. regexpRecord.[[Unicode]]true または regexpRecord.[[UnicodeSets]]true の場合、true を返す。
  2. false を返す。

22.2.2.9.3 WordCharacters ( regexpRecord )

The abstract operation WordCharacters takes argument regexpRecord (RegExp Record) and returns CharSet. \b\B\w、および \W の目的において「単語character」と見なされるcharacterを含むCharSetを返します。 It performs the following steps when called:

  1. basicWordChars をASCII単語character内のすべてのcharacterを含むCharSetとする。
  2. extraWordChars を、basicWordChars 内に含まれないが Canonicalize(regexpRecord, c) が basicWordChars 内にあるような、すべてのcharacter c を含むCharSetとする。
  3. Assert: HasEitherUnicodeFlag(regexpRecord) が true かつ regexpRecord.[[IgnoreCase]]true でない限り、extraWordChars は空である。
  4. basicWordCharsextraWordChars の和集合を返す。

22.2.2.9.4 AllCharacters ( regexpRecord )

The abstract operation AllCharacters takes argument regexpRecord (RegExp Record) and returns CharSet. 正規表現フラグに従った「すべてのcharacter」の集合を返します。 It performs the following steps when called:

  1. regexpRecord.[[UnicodeSets]]true かつ regexpRecord.[[IgnoreCase]]true の場合、次を行う:
    1. Simple Case Folding マッピングを持たない(すなわち scf(c)=c である)すべてのUnicodeコードポイント c を含むCharSetを返す。
  2. HasEitherUnicodeFlag(regexpRecord) が true の場合、次を行う:
    1. すべてのコードポイント値を含むCharSetを返す。
  3. すべてのコード単位値を含むCharSetを返す。

22.2.2.9.5 MaybeSimpleCaseFolding ( regexpRecord, charSet )

The abstract operation MaybeSimpleCaseFolding takes arguments regexpRecord (RegExp Record) and charSet (CharSet) and returns CharSet. regexpRecord.[[UnicodeSets]]false または regexpRecord.[[IgnoreCase]]false の場合、charSet を返します。それ以外の場合、Unicode Character Databaseのファイル CaseFolding.txt にある Simple Case Foldingscf(cp))定義(それぞれが単一コードポイントを別の単一コードポイントへ写像する)を用いて、charSet の各CharSetElementをcharacterごとに正準形式へ写像し、その結果のCharSetを返します。 It performs the following steps when called:

  1. regexpRecord.[[UnicodeSets]]false または regexpRecord.[[IgnoreCase]]false の場合、charSet を返す。
  2. otherSet を新しい空のCharSetとする。
  3. charSet の各CharSetElement s について、次を行う:
    1. t を空のcharacter列とする。
    2. s 内の各単一コードポイント cp について、次を行う:
      1. scf(cp) を t に追加する。
    3. totherSet に追加する。
  4. otherSet を返す。

22.2.2.9.6 CharacterComplement ( regexpRecord, complement )

The abstract operation CharacterComplement takes arguments regexpRecord (RegExp Record) and complement (CharSet) and returns CharSet. It performs the following steps when called:

  1. charSetAllCharacters(regexpRecord) とする。
  2. charSetCharSetElementのうち、complementCharSetElementでもあるものを除いたCharSetを返す。

22.2.2.9.7 UnicodeMatchProperty ( regexpRecord, p )

The abstract operation UnicodeMatchProperty takes arguments regexpRecord (RegExp Record) and p (ECMAScriptソーステキスト) and returns Unicodeプロパティ名. It performs the following steps when called:

  1. regexpRecord.[[UnicodeSets]]true であり、かつ pTable 66 の「Property name」列に列挙されているUnicodeプロパティ名である場合、次を行う:
    1. UnicodeコードポイントのList p を返す。
  2. Assert: pTable 64 または Table 65 の「Property name and aliases」列に列挙されているUnicodeプロパティ名またはプロパティ別名である。
  3. c を、対応する行の「Canonical property name」列に与えられている、p の正準プロパティ名とする。
  4. UnicodeコードポイントのList c を返す。

実装は、Table 64Table 65、および Table 66 に列挙されているUnicodeプロパティ名および別名をサポートしなければなりません。相互運用性を確保するため、実装は他のプロパティ名または別名をサポートしてはなりません。

Note 1

例えば、Script_Extensionsプロパティ名)および scx(プロパティ別名)は有効ですが、script_extensions または Scx は有効ではありません。

Note 2

列挙されたプロパティは、UTS18 RL1.2 が要求するものの上位集合を形成します。

Note 3

これらの表内のエントリの綴り(大文字小文字を含む)は、Unicode Character Databaseのファイル PropertyAliases.txt で使用される綴りと一致します。そのファイル内の正確な綴りは安定であることが保証されています

Table 64: Non-binary Unicode property aliases and their canonical property names
Property name and aliases Canonical property name
General_Category General_Category
gc
Script Script
sc
Script_Extensions Script_Extensions
scx
Table 65: Binary Unicode property aliases and their canonical property names
Property name and aliases Canonical property name
ASCII ASCII
ASCII_Hex_Digit ASCII_Hex_Digit
AHex
Alphabetic Alphabetic
Alpha
Any Any
Assigned Assigned
Bidi_Control Bidi_Control
Bidi_C
Bidi_Mirrored Bidi_Mirrored
Bidi_M
Case_Ignorable Case_Ignorable
CI
Cased Cased
Changes_When_Casefolded Changes_When_Casefolded
CWCF
Changes_When_Casemapped Changes_When_Casemapped
CWCM
Changes_When_Lowercased Changes_When_Lowercased
CWL
Changes_When_NFKC_Casefolded Changes_When_NFKC_Casefolded
CWKCF
Changes_When_Titlecased Changes_When_Titlecased
CWT
Changes_When_Uppercased Changes_When_Uppercased
CWU
Dash Dash
Default_Ignorable_Code_Point Default_Ignorable_Code_Point
DI
Deprecated Deprecated
Dep
Diacritic Diacritic
Dia
Emoji Emoji
Emoji_Component Emoji_Component
EComp
Emoji_Modifier Emoji_Modifier
EMod
Emoji_Modifier_Base Emoji_Modifier_Base
EBase
Emoji_Presentation Emoji_Presentation
EPres
Extended_Pictographic Extended_Pictographic
ExtPict
Extender Extender
Ext
Grapheme_Base Grapheme_Base
Gr_Base
Grapheme_Extend Grapheme_Extend
Gr_Ext
Hex_Digit Hex_Digit
Hex
IDS_Binary_Operator IDS_Binary_Operator
IDSB
IDS_Trinary_Operator IDS_Trinary_Operator
IDST
ID_Continue ID_Continue
IDC
ID_Start ID_Start
IDS
Ideographic Ideographic
Ideo
Join_Control Join_Control
Join_C
Logical_Order_Exception Logical_Order_Exception
LOE
Lowercase Lowercase
Lower
Math Math
Noncharacter_Code_Point Noncharacter_Code_Point
NChar
Pattern_Syntax Pattern_Syntax
Pat_Syn
Pattern_White_Space Pattern_White_Space
Pat_WS
Quotation_Mark Quotation_Mark
QMark
Radical Radical
Regional_Indicator Regional_Indicator
RI
Sentence_Terminal Sentence_Terminal
STerm
Soft_Dotted Soft_Dotted
SD
Terminal_Punctuation Terminal_Punctuation
Term
Unified_Ideograph Unified_Ideograph
UIdeo
Uppercase Uppercase
Upper
Variation_Selector Variation_Selector
VS
White_Space White_Space
space
XID_Continue XID_Continue
XIDC
XID_Start XID_Start
XIDS
Table 66: Binary Unicode properties of strings
Property name
Basic_Emoji
Emoji_Keycap_Sequence
RGI_Emoji_Modifier_Sequence
RGI_Emoji_Flag_Sequence
RGI_Emoji_Tag_Sequence
RGI_Emoji_ZWJ_Sequence
RGI_Emoji

22.2.2.9.8 UnicodeMatchPropertyValue ( p, v )

The abstract operation UnicodeMatchPropertyValue takes arguments p (ECMAScriptソーステキスト) and v (ECMAScriptソーステキスト) and returns Unicodeプロパティ値. It performs the following steps when called:

  1. Assert: pTable 64 の「Canonical property name」列に列挙されている正準で別名でないUnicodeプロパティ名である。
  2. Assert: vPropertyValueAliases.txt に列挙されているUnicodeプロパティ p のプロパティ値またはプロパティ値別名である。
  3. value を、対応する行の「Canonical property value」列に与えられている v の正準プロパティ値とする。
  4. UnicodeコードポイントのList value を返す。

実装は、Table 64 に列挙されているプロパティについて、PropertyValueAliases.txt に列挙されているUnicodeプロパティ値およびプロパティ値別名をサポートしなければなりません。相互運用性を確保するため、実装は他のプロパティ値またはプロパティ値別名をサポートしてはなりません。

Note 1

例えば、Xpeo および Old_Persian は有効な Script_Extensions 値ですが、xpeo および Old Persian は有効ではありません。

Note 2

このアルゴリズムは、UAX44に列挙されているシンボリック値のマッチング規則とは異なります。大文字小文字、空白、U+002D(HYPHEN-MINUS)、および U+005F(LOW LINE)は無視されず、Is 接頭辞はサポートされません。

22.2.2.10 Runtime Semantics: CompileClassSetString

The syntax-directed operation CompileClassSetString takes argument regexpRecord (RegExp Record) and returns characterの列. It is defined piecewise over the following productions:

ClassString :: [empty]
  1. 空のcharacter列を返す。
ClassString :: NonEmptyClassString
  1. 引数 regexpRecord での NonEmptyClassStringCompileClassSetString を返す。
NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt
  1. cs を、引数 regexpRecord での ClassSetCharacterCompileToCharSet とする。
  2. s1 を、cs の単一のCharSetElementであるcharacter列とする。
  3. NonEmptyClassString が存在する場合、次を行う:
    1. s2 を、引数 regexpRecord での NonEmptyClassStringCompileClassSetString とする。
    2. s1s2 の連結を返す。
  4. s1 を返す。

22.2.3 RegExp作成のための抽象操作

22.2.3.1 RegExpCreate ( pattern, flags )

The abstract operation RegExpCreate takes arguments pattern (ECMAScript言語値) and flags (Stringまたはundefined) and returns Objectを含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. obj を ! RegExpAlloc(%RegExp%) とする。
  2. RegExpInitialize(obj, pattern, flags) を返す。

22.2.3.2 RegExpAlloc ( newTarget )

The abstract operation RegExpAlloc takes argument newTarget (コンストラクター) and returns Objectを含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. obj を ? OrdinaryCreateFromConstructor(newTarget, "%RegExp.prototype%", « [[OriginalSource]], [[OriginalFlags]], [[RegExpRecord]], [[RegExpMatcher]] ») とする。
  2. DefinePropertyOrThrow(obj, "lastIndex", PropertyDescriptor { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false }) を実行する。
  3. obj を返す。

22.2.3.3 RegExpInitialize ( obj, pattern, flags )

The abstract operation RegExpInitialize takes arguments obj (Object), pattern (ECMAScript言語値), and flags (ECMAScript言語値) and returns Objectを含む正常完了またはスロー完了のいずれか. It performs the following steps when called:

  1. patternundefined の場合、pattern を空のStringに設定する。
  2. そうでない場合、pattern を ? ToString(pattern) に設定する。
  3. flagsundefined の場合、flags を空のStringに設定する。
  4. そうでない場合、flags を ? ToString(flags) に設定する。
  5. flags"d""g""i""m""s""u""v"、または "y" 以外のコード単位を含む場合、SyntaxError 例外をスローする。
  6. flags が同じコード単位を複数回含む場合、SyntaxError 例外をスローする。
  7. flags"i" を含む場合、itrue とする。そうでない場合、ifalse とする。
  8. flags"m" を含む場合、mtrue とする。そうでない場合、mfalse とする。
  9. flags"s" を含む場合、strue とする。そうでない場合、sfalse とする。
  10. flags"u" を含む場合、utrue とする。そうでない場合、ufalse とする。
  11. flags"v" を含む場合、vtrue とする。そうでない場合、vfalse とする。
  12. utrue または vtrue の場合、次を行う:
    1. patternTextStringToCodePoints(pattern) とする。
  13. それ以外の場合、
    1. patternText を、pattern の各16ビット要素をUnicode BMPコードポイントとして解釈した結果とする。要素にはUTF-16復号は適用されない。
  14. parseResultParsePattern(patternText, u, v) とする。
  15. parseResultSyntaxError オブジェクトの空でないListである場合、SyntaxError 例外をスローする。
  16. Assert: parseResultPattern Parse Nodeである。
  17. obj.[[OriginalSource]]pattern に設定する。
  18. obj.[[OriginalFlags]]flags に設定する。
  19. capturingGroupsCountCountLeftCapturingParensWithin(parseResult) とする。
  20. regexpRecordRegExp Record { [[IgnoreCase]]: i, [[Multiline]]: m, [[DotAll]]: s, [[Unicode]]: u, [[UnicodeSets]]: v, [[CapturingGroupsCount]]: capturingGroupsCount } とする。
  21. obj.[[RegExpRecord]]regexpRecord に設定する。
  22. obj.[[RegExpMatcher]] を、引数 regexpRecord での parseResultCompilePattern に設定する。
  23. Set(obj, "lastIndex", +0𝔽, true) を実行する。
  24. obj を返す。

22.2.3.4 Static Semantics: ParsePattern ( patternText, u, v )

The abstract operation ParsePattern takes arguments patternText (Unicodeコードポイントの列), u (Boolean), and v (Boolean) and returns Parse NodeまたはSyntaxErrorオブジェクトの空でないList.

Note

この節は B.1.2.9 で修正されます。

It performs the following steps when called:

  1. vtrue かつ utrue の場合、次を行う:
    1. parseResult を1つ以上の SyntaxError オブジェクトを含むListとする。
  2. そうでなく vtrue の場合、次を行う:
    1. parseResultParseText(patternText, Pattern[+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups]) とする。
  3. そうでなく utrue の場合、次を行う:
    1. parseResultParseText(patternText, Pattern[+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) とする。
  4. それ以外の場合、
    1. parseResultParseText(patternText, Pattern[~UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) とする。
  5. parseResult を返す。

22.2.4 RegExpコンストラクター

RegExpコンストラクターは以下の通りです:

  • %RegExp%である。
  • グローバルオブジェクト"RegExp"プロパティの初期値である。
  • コンストラクターとして呼び出されたとき、新しいRegExpオブジェクトを作成して初期化する。
  • コンストラクターとしてではなく関数として呼び出されたとき、新しいRegExpオブジェクト、または唯一の引数がRegExpオブジェクトである場合はその引数自体のいずれかを返す。
  • クラス定義のextends節の値として使用できる。指定されたRegExpの動作を継承することを意図するサブクラスコンストラクターは、必要な内部スロットを持つサブクラスインスタンスを作成して初期化するために、RegExpコンストラクターへのsuper呼び出しを含めなければならない。

22.2.4.1 RegExp ( patternOrRegexp, flags )

この関数は呼び出されたとき、次の手順を実行します:

  1. patternIsRegExp を ? IsRegExp(patternOrRegexp) とする。
  2. NewTarget が undefined の場合、次を行う:
    1. newTarget を実行中の関数オブジェクトとする。
    2. patternIsRegExptrue かつ flagsundefined の場合、次を行う:
      1. patternConstructor を ? Get(patternOrRegexp, "constructor") とする。
      2. SameValue(newTarget, patternConstructor) が true の場合、patternOrRegexp を返す。
  3. それ以外の場合、
    1. newTarget を NewTarget とする。
  4. patternOrRegexp がObjectであり、かつ patternOrRegexp[[RegExpMatcher]] 内部スロットを持つ場合、次を行う:
    1. patternSourcepatternOrRegexp.[[OriginalSource]] とする。
    2. flagsundefined の場合、flagspatternOrRegexp.[[OriginalFlags]] に設定する。
  5. そうでなく patternIsRegExptrue の場合、次を行う:
    1. patternSource を ? Get(patternOrRegexp, "source") とする。
    2. flagsundefined の場合、次を行う:
      1. flags を ? Get(patternOrRegexp, "flags") に設定する。
  6. それ以外の場合、
    1. patternSourcepatternOrRegexp とする。
  7. obj を ? RegExpAlloc(newTarget) とする。
  8. RegExpInitialize(obj, patternSource, flags) を返す。
Note

patternが StringLiteral を使用して供給される場合、通常のエスケープ列置換は、この関数によってStringが処理される前に実行されます。patternがこの関数によって認識されるためにエスケープ列を含まなければならない場合、StringLiteral の内容が形成されるときにU+005C(REVERSE SOLIDUS)コードポイントが除去されないように、StringLiteral 内でそれらをエスケープしなければなりません。

22.2.5 RegExpコンストラクターのプロパティ

RegExpコンストラクターは以下の通りです:

  • [[Prototype]]内部スロットを持ち、その値は %Function.prototype% である。
  • 以下のプロパティを持つ:

22.2.5.1 RegExp.escape ( str )

この関数は、正規表現 Pattern において潜在的に特別である文字が等価なエスケープ列に置き換えられた、str のコピーを返します。

呼び出されたとき、次の手順を実行します:

  1. str がStringでない場合、TypeError 例外をスローする。
  2. escaped を空のStringとする。
  3. cpListStringToCodePoints(str) とする。
  4. cpList の各コードポイント cp について、次を行う:
    1. escaped が空のStringであり、かつ cpDecimalDigit または AsciiLetter のいずれかに一致する場合、次を行う:
      1. NOTE: 先頭の数字をエスケープすると、出力が \0 characterエスケープまたは \1 のような DecimalEscape の後に使用され得るパターンテキストに対応し、それでも先行するエスケープ列の拡張として解釈されるのではなく str にマッチすることが保証される。先頭のASCII文字をエスケープすることは、\c の後の文脈について同じことを行う。
      2. numericValuecp の数値とする。
      3. hexNumber::toString(𝔽(numericValue), 16) とする。
      4. Assert: hex の長さは2である。
      5. escaped を、コード単位0x005C(REVERSE SOLIDUS)、"x"、および hex の文字列連結に設定する。
    2. それ以外の場合、
      1. escapedescapedEncodeForRegExpEscape(cp) の文字列連結に設定する。
  5. escaped を返す。
Note

名前は似ていますが、EscapeRegExpPatternRegExp.escapeは同様の動作を行いません。前者は文字列として表現するためにパターンをエスケープし、この関数はパターン内で表現するために文字列をエスケープします。

22.2.5.1.1 EncodeForRegExpEscape ( cp )

The abstract operation EncodeForRegExpEscape takes argument cp (コードポイント) and returns String. これは、cp にマッチする Pattern を表すStringを返します。cp が空白またはASCII区切り記号である場合、返される値はエスケープ列です。それ以外の場合、返される値は cp 自体のString表現です。 It performs the following steps when called:

  1. cpSyntaxCharacter に一致するか、または cp が U+002F(SOLIDUS)である場合、次を行う:
    1. 0x005C(REVERSE SOLIDUS)と UTF16EncodeCodePoint(cp) の文字列連結を返す。
  2. cpTable 62 の「Code Point」列に列挙されているコードポイントである場合、次を行う:
    1. 0x005C(REVERSE SOLIDUS)と、cp を含む「Code Point」列の行の「ControlEscape」列内の文字列の文字列連結を返す。
  3. otherPunctuators",-=<>#&!%:;@~'`" とコード単位0x0022(QUOTATION MARK)の文字列連結とする。
  4. toEscapeStringToCodePoints(otherPunctuators) とする。
  5. toEscapecp を含むか、cpWhiteSpace または LineTerminator のいずれかに一致するか、または cp が先行サロゲートまたは後続サロゲートと同じ数値を持つ場合、次を行う:
    1. cpNumcp の数値とする。
    2. cpNum ≤ 0xFF の場合、次を行う:
      1. hexNumber::toString(𝔽(cpNum), 16) とする。
      2. コード単位0x005C(REVERSE SOLIDUS)、"x"、および StringPad(hex, 2, "0", start) の文字列連結を返す。
    3. escaped を空のStringとする。
    4. codeUnitsUTF16EncodeCodePoint(cp) とする。
    5. codeUnits の各コード単位 cu について、次を行う:
      1. escapedescapedUnicodeEscape(cu) の文字列連結に設定する。
    6. escaped を返す。
  6. UTF16EncodeCodePoint(cp) を返す。

22.2.5.2 RegExp.prototype

RegExp.prototypeの初期値はRegExpプロトタイプオブジェクトです。

このプロパティの属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } です。

22.2.5.3 get RegExp [ %Symbol.species% ]

RegExp[%Symbol.species%]は、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. this値を返す。

この関数の"name"プロパティの値は "get [Symbol.species]" です。

Note

RegExpプロトタイプメソッドは通常、そのthis値のコンストラクターを使用して派生オブジェクトを作成します。しかし、サブクラスコンストラクターは、その%Symbol.species%プロパティを再定義することにより、その既定の動作を上書きできます。

22.2.6 RegExpプロトタイプオブジェクトのプロパティ

RegExpプロトタイプオブジェクトは以下の通りです:

  • %RegExp.prototype%である。
  • 通常のオブジェクトである。
  • RegExpインスタンスではなく、[[RegExpMatcher]]内部スロットまたはRegExpインスタンスオブジェクトの他の内部スロットを持たない。
  • [[Prototype]]内部スロットを持ち、その値は %Object.prototype% である。
Note

RegExpプロトタイプオブジェクトは独自の"valueOf"プロパティを持ちません。しかし、Objectプロトタイプオブジェクトから"valueOf"プロパティを継承します。

22.2.6.1 RegExp.prototype.constructor

RegExp.prototype.constructorの初期値は %RegExp% です。

22.2.6.2 RegExp.prototype.exec ( string )

このメソッドは string から正規表現パターンの出現を検索し、マッチ結果を含むArrayを返します。または string がマッチしなかった場合は null を返します。

呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. RequireInternalSlot(regexp, [[RegExpMatcher]]) を実行する。
  3. str を ? ToString(string) とする。
  4. RegExpBuiltinExec(regexp, str) を返す。

22.2.6.3 get RegExp.prototype.dotAll

RegExp.prototype.dotAllは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. cu をコード単位0x0073(LATIN SMALL LETTER S)とする。
  3. RegExpHasFlag(regexp, cu) を返す。

22.2.6.4 get RegExp.prototype.flags

RegExp.prototype.flagsは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. codeUnits を新しい空のListとする。
  4. hasIndicesToBoolean(? Get(regexp, "hasIndices")) とする。
  5. hasIndicestrue の場合、コード単位0x0064(LATIN SMALL LETTER D)を codeUnits に追加する。
  6. globalToBoolean(? Get(regexp, "global")) とする。
  7. globaltrue の場合、コード単位0x0067(LATIN SMALL LETTER G)を codeUnits に追加する。
  8. ignoreCaseToBoolean(? Get(regexp, "ignoreCase")) とする。
  9. ignoreCasetrue の場合、コード単位0x0069(LATIN SMALL LETTER I)を codeUnits に追加する。
  10. multilineToBoolean(? Get(regexp, "multiline")) とする。
  11. multilinetrue の場合、コード単位0x006D(LATIN SMALL LETTER M)を codeUnits に追加する。
  12. dotAllToBoolean(? Get(regexp, "dotAll")) とする。
  13. dotAlltrue の場合、コード単位0x0073(LATIN SMALL LETTER S)を codeUnits に追加する。
  14. unicodeToBoolean(? Get(regexp, "unicode")) とする。
  15. unicodetrue の場合、コード単位0x0075(LATIN SMALL LETTER U)を codeUnits に追加する。
  16. unicodeSetsToBoolean(? Get(regexp, "unicodeSets")) とする。
  17. unicodeSetstrue の場合、コード単位0x0076(LATIN SMALL LETTER V)を codeUnits に追加する。
  18. stickyToBoolean(? Get(regexp, "sticky")) とする。
  19. stickytrue の場合、コード単位0x0079(LATIN SMALL LETTER Y)を codeUnits に追加する。
  20. List codeUnits の要素をコード単位とするString値を返す。codeUnits が要素を持たない場合、空のStringが返される。

22.2.6.4.1 RegExpHasFlag ( regexp, codeUnit )

The abstract operation RegExpHasFlag takes arguments regexp (ECMAScript言語値) and codeUnit (コード単位) and returns Booleanまたはundefinedのいずれかを含む正常完了、またはスロー完了のいずれか. It performs the following steps when called:

  1. regexp がObjectでない場合、TypeError 例外をスローする。
  2. regexp[[OriginalFlags]] 内部スロットを持たない場合、次を行う:
    1. SameValue(regexp, %RegExp.prototype%) が true の場合、undefined を返す。
    2. TypeError 例外をスローする。
  3. flagsregexp.[[OriginalFlags]] とする。
  4. flagscodeUnit を含む場合、true を返す。
  5. false を返す。

22.2.6.5 get RegExp.prototype.global

RegExp.prototype.globalは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. cu をコード単位0x0067(LATIN SMALL LETTER G)とする。
  3. RegExpHasFlag(regexp, cu) を返す。

22.2.6.6 get RegExp.prototype.hasIndices

RegExp.prototype.hasIndicesは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. cu をコード単位0x0064(LATIN SMALL LETTER D)とする。
  3. RegExpHasFlag(regexp, cu) を返す。

22.2.6.7 get RegExp.prototype.ignoreCase

RegExp.prototype.ignoreCaseは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. cu をコード単位0x0069(LATIN SMALL LETTER I)とする。
  3. RegExpHasFlag(regexp, cu) を返す。

22.2.6.8 RegExp.prototype [ %Symbol.match% ] ( string )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. str を ? ToString(string) とする。
  4. flags を ? ToString(? Get(regexp, "flags")) とする。
  5. flags"g" を含まない場合、? RegExpExec(regexp, str) を返す。
  6. flags"u" を含むか、または flags"v" を含む場合、fullUnicodetrue とする。そうでない場合、fullUnicodefalse とする。
  7. Set(regexp, "lastIndex", +0𝔽, true) を実行する。
  8. array を ! ArrayCreate(0) とする。
  9. matchCount を 0 とする。
  10. 繰り返す:
    1. result を ? RegExpExec(regexp, str) とする。
    2. resultnull の場合、次を行う:
      1. matchCount = 0 の場合、null を返す。
      2. array を返す。
    3. matchStr を ? ToString(? Get(result, "0")) とする。
    4. CreateDataPropertyOrThrow(array, ! ToString(𝔽(matchCount)), matchStr) を実行する。
    5. matchStr が空のStringである場合、次を行う:
      1. thisIndex(? ToLength(? Get(regexp, "lastIndex"))) とする。
      2. nextIndexAdvanceStringIndex(str, thisIndex, fullUnicode) とする。
      3. Set(regexp, "lastIndex", 𝔽(nextIndex), true) を実行する。
    6. matchCountmatchCount + 1 に設定する。

このメソッドの"name"プロパティの値は "[Symbol.match]" です。

Note

%Symbol.match%プロパティは、正規表現の基本的な動作を持つオブジェクトを識別するためにIsRegExp抽象操作によって使用されます。%Symbol.match%プロパティが存在しないこと、またはそのようなプロパティが存在してもその値がBooleanに強制変換されたとき true にならないことは、そのオブジェクトが正規表現オブジェクトとして使用されることを意図していないことを示します。

22.2.6.9 RegExp.prototype [ %Symbol.matchAll% ] ( string )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. str を ? ToString(string) とする。
  4. speciesConstructor を ? SpeciesConstructor(regexp, %RegExp%) とする。
  5. flags を ? ToString(? Get(regexp, "flags")) とする。
  6. matcher を ? Construct(speciesConstructor, « regexp, flags ») とする。
  7. lastIndex を ? ToLength(? Get(regexp, "lastIndex")) とする。
  8. Set(matcher, "lastIndex", lastIndex, true) を実行する。
  9. flags"g" を含む場合、globaltrue とする。
  10. それ以外の場合、globalfalse とする。
  11. flags"u" を含むか、または flags"v" を含む場合、fullUnicodetrue とする。
  12. それ以外の場合、fullUnicodefalse とする。
  13. CreateRegExpStringIterator(matcher, str, global, fullUnicode) を返す。

このメソッドの"name"プロパティの値は "[Symbol.matchAll]" です。

22.2.6.10 get RegExp.prototype.multiline

RegExp.prototype.multilineは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. cu をコード単位0x006D(LATIN SMALL LETTER M)とする。
  3. RegExpHasFlag(regexp, cu) を返す。

22.2.6.11 RegExp.prototype [ %Symbol.replace% ] ( string, replaceValue )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. str を ? ToString(string) とする。
  4. lengthSstr の長さとする。
  5. functionalReplaceIsCallable(replaceValue) とする。
  6. functionalReplacefalse の場合、次を行う:
    1. replaceValue を ? ToString(replaceValue) に設定する。
  7. flags を ? ToString(? Get(regexp, "flags")) とする。
  8. flags"g" を含む場合、globaltrue とする。そうでない場合、globalfalse とする。
  9. globaltrue の場合、次を行う:
    1. Set(regexp, "lastIndex", +0𝔽, true) を実行する。
  10. results を新しい空のListとする。
  11. donefalse とする。
  12. donefalse の間、繰り返す:
    1. result を ? RegExpExec(regexp, str) とする。
    2. resultnull の場合、次を行う:
      1. donetrue に設定する。
    3. それ以外の場合、
      1. resultresults に追加する。
      2. globalfalse の場合、次を行う:
        1. donetrue に設定する。
      3. それ以外の場合、
        1. matchStr を ? ToString(? Get(result, "0")) とする。
        2. matchStr が空のStringである場合、次を行う:
          1. thisIndex(? ToLength(? Get(regexp, "lastIndex"))) とする。
          2. flags"u" を含むか、または flags"v" を含む場合、fullUnicodetrue とする。そうでない場合、fullUnicodefalse とする。
          3. nextIndexAdvanceStringIndex(str, thisIndex, fullUnicode) とする。
          4. Set(regexp, "lastIndex", 𝔽(nextIndex), true) を実行する。
  13. accumulatedResult を空のStringとする。
  14. nextSourcePosition を 0 とする。
  15. results の各要素 result について、次を行う:
    1. resultLength を ? LengthOfArrayLike(result) とする。
    2. nCapturesmax(resultLength - 1, 0) とする。
    3. matched を ? ToString(? Get(result, "0")) とする。
    4. matchLengthmatched の長さとする。
    5. position を ? ToIntegerOrInfinity(? Get(result, "index")) とする。
    6. position を、0と lengthS の間にクランプした結果に設定する。
    7. captures を新しい空のListとする。
    8. captureNumber を 1 とする。
    9. captureNumbernCaptures の間、繰り返す:
      1. capN を ? Get(result, ! ToString(𝔽(captureNumber))) とする。
      2. capNundefined でない場合、次を行う:
        1. capN を ? ToString(capN) に設定する。
      3. capNcaptures に追加する。
      4. NOTE: captureNumber = 1 の場合、直前のステップは最初の要素を captures(インデックス0)に入れる。より一般には、captureNumber番目 のキャプチャ(captureNumber番目 のキャプチャ括弧集合によってキャプチャされた文字)は captures[captureNumber - 1] にある。
      5. captureNumbercaptureNumber + 1 に設定する。
    10. namedCaptures を ? Get(result, "groups") とする。
    11. functionalReplacetrue の場合、次を行う:
      1. replacerArgs を « matched »、captures、および « 𝔽(position), str » のリスト連結とする。
      2. namedCapturesundefined でない場合、次を行う:
        1. namedCapturesreplacerArgs に追加する。
      3. replacementValue を ? Call(replaceValue, undefined, replacerArgs) とする。
      4. replacementString を ? ToString(replacementValue) とする。
    12. それ以外の場合、
      1. namedCapturesundefined でない場合、次を行う:
        1. namedCaptures を ? ToObject(namedCaptures) に設定する。
      2. replacementString を ? GetSubstitution(matched, str, position, captures, namedCaptures, replaceValue) とする。
    13. positionnextSourcePosition の場合、次を行う:
      1. NOTE: position は通常、後方へ移動すべきではない。もしそうなる場合、それはRegExpサブクラスの不適切な挙動、またはアクセストリガーの副作用を用いて regexp のglobalフラグまたは他の特性を変更したことを示している。そのような場合、対応する置換は無視される。
      2. accumulatedResult を、accumulatedResultstrnextSourcePosition から position までの部分文字列、および replacementString の文字列連結に設定する。
      3. nextSourcePositionposition + matchLength に設定する。
  16. nextSourcePositionlengthS の場合、accumulatedResult を返す。
  17. accumulatedResultstrnextSourcePosition からの部分文字列の文字列連結を返す。

このメソッドの"name"プロパティの値は "[Symbol.replace]" です。

22.2.6.12 RegExp.prototype [ %Symbol.search% ] ( string )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. str を ? ToString(string) とする。
  4. previousLastIndex を ? Get(regexp, "lastIndex") とする。
  5. previousLastIndex+0𝔽 でない場合、次を行う:
    1. Set(regexp, "lastIndex", +0𝔽, true) を実行する。
  6. result を ? RegExpExec(regexp, str) とする。
  7. currentLastIndex を ? Get(regexp, "lastIndex") とする。
  8. SameValue(currentLastIndex, previousLastIndex) が false の場合、次を行う:
    1. Set(regexp, "lastIndex", previousLastIndex, true) を実行する。
  9. resultnull の場合、-1𝔽 を返す。
  10. Get(result, "index") を返す。

このメソッドの"name"プロパティの値は "[Symbol.search]" です。

Note

このRegExpオブジェクトの"lastIndex"および"global"プロパティは、検索を実行するとき無視されます。"lastIndex"プロパティは変更されません。

22.2.6.13 get RegExp.prototype.source

RegExp.prototype.sourceは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. regexp[[OriginalSource]] 内部スロットを持たない場合、次を行う:
    1. SameValue(regexp, %RegExp.prototype%) が true の場合、"(?:)" を返す。
    2. TypeError 例外をスローする。
  4. Assert: regexp[[OriginalFlags]] 内部スロットを持つ。
  5. srcregexp.[[OriginalSource]] とする。
  6. flagsregexp.[[OriginalFlags]] とする。
  7. EscapeRegExpPattern(src, flags) を返す。

22.2.6.13.1 EscapeRegExpPattern ( pattern, flags )

The abstract operation EscapeRegExpPattern takes arguments pattern (String) and flags (String) and returns String. It performs the following steps when called:

  1. flags"v" を含む場合、次を行う:
    1. patternSymbolPattern[+UnicodeMode, +UnicodeSetsMode] とする。
  2. そうでなく flags"u" を含む場合、次を行う:
    1. patternSymbolPattern[+UnicodeMode, ~UnicodeSetsMode] とする。
  3. それ以外の場合、
    1. patternSymbolPattern[~UnicodeMode, ~UnicodeSetsMode] とする。
  4. escapedPattern を、UTF-16符号化Unicodeコードポイント(6.1.4)として解釈された pattern と等価な patternSymbol 形式のStringとし、その中で特定のコードポイントは以下で説明されるようにエスケープされているものとする。escapedPatternpattern と異なっても異ならなくてもよい。ただし、escapedPatternpatternSymbol として評価することで生じるAbstract Closureは、構築されたオブジェクトの[[RegExpMatcher]]内部スロットによって与えられるAbstract Closureと同一に動作しなければならない。同じ pattern および flags の値を用いたこの抽象操作への複数回の呼び出しは、同一の結果を生成しなければならない。
  5. パターン内に出現するコードポイント / または任意の LineTerminator は、"\"/escapedPattern"/"、および flags の文字列連結が、(適切な字句文脈で)構築された正規表現と同一に動作する RegularExpressionLiteral として解析できることを保証するために、必要に応じて escapedPattern 内でエスケープされなければならない。例えば、pattern"/" である場合、escapedPattern"\/" または "\u002F" などであり得るが、"/" ではあり得ない。なぜなら、flags が後続する ///RegularExpressionLiteral ではなく SingleLineComment として解析されるためである。pattern が空のStringである場合、この仕様は escapedPattern"(?:)" とすることで満たすことができる。
  6. escapedPattern を返す。
Note

名前は似ていますが、RegExp.escapeとEscapeRegExpPatternは同様の動作を行いません。前者はパターン内で表現するために文字列をエスケープし、この関数は文字列として表現するためにパターンをエスケープします。

22.2.6.14 RegExp.prototype [ %Symbol.split% ] ( string, limit )

Note 1

このメソッドは、string をStringに変換した結果の部分文字列を格納したArrayを返します。部分文字列は、this値の正規表現とのマッチを左から右に検索することによって決定されます。これらの出現は返される配列内のどのStringの一部でもありませんが、String値を分割する役割を果たします。

this値は空の正規表現、または空のStringにマッチできる正規表現であってもかまいません。この場合、正規表現は入力Stringの先頭または末尾の空の部分文字列にはマッチせず、また前回のセパレータマッチの末尾の空の部分文字列にもマッチしません。(例えば、正規表現が空のStringにマッチする場合、Stringは個々のコード単位要素に分割されます。結果配列の長さはStringの長さに等しく、各部分文字列は1つのコード単位を含みます。)バックトラッキングによってそのインデックスで空でない部分文字列マッチが得られ得る場合でも、Stringの特定のインデックスにおける最初のマッチのみが考慮されます。(例えば、/a*?/[Symbol.split]("ab") は配列 ["a", "b"] に評価される一方、/a*/[Symbol.split]("ab") は配列 ["","b"] に評価されます。)

string が空のStringである(または空のStringに変換される)場合、結果は正規表現が空のStringにマッチできるかどうかに依存します。マッチできる場合、結果配列は要素を含みません。そうでない場合、結果配列は1つの要素を含み、それは空のStringです。

正規表現がキャプチャ括弧を含む場合、separator がマッチするたびに、キャプチャ括弧の結果(任意の undefined 結果を含む)が出力配列に挿入されます。例えば、

/<(\/)?([^<>]+)>/[Symbol.split]("A<B>bold</B>and<CODE>coded</CODE>")

は次の配列に評価されます:

["A", undefined, "B", "bold", "/", "B", "and", undefined, "CODE", "coded", "/", "CODE", ""]

limitundefined でない場合、出力配列は limit 要素以下になるように切り詰められます。

このメソッドは呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. str を ? ToString(string) とする。
  4. speciesConstructor を ? SpeciesConstructor(regexp, %RegExp%) とする。
  5. flags を ? ToString(? Get(regexp, "flags")) とする。
  6. flags"u" を含むか、または flags"v" を含む場合、unicodeMatchingtrue とする。
  7. それ以外の場合、unicodeMatchingfalse とする。
  8. flags"y" を含む場合、newFlagsflags とする。
  9. それ以外の場合、newFlagsflags"y" の文字列連結とする。
  10. splitter を ? Construct(speciesConstructor, « regexp, newFlags ») とする。
  11. array を ! ArrayCreate(0) とする。
  12. lengthA を 0 とする。
  13. limitundefined の場合、lim を 232 - 1 とする。そうでない場合、lim(? ToUint32(limit)) とする。
  14. lim = 0 の場合、array を返す。
  15. str が空のStringである場合、次を行う:
    1. matchResult を ? RegExpExec(splitter, str) とする。
    2. matchResultnull でない場合、array を返す。
    3. CreateDataPropertyOrThrow(array, "0", str) を実行する。
    4. array を返す。
  16. sizestr の長さとする。
  17. lastMatchEnd を 0 とする。
  18. searchIndexlastMatchEnd とする。
  19. searchIndex < size の間、繰り返す:
    1. Set(splitter, "lastIndex", 𝔽(searchIndex), true) を実行する。
    2. matchResult を ? RegExpExec(splitter, str) とする。
    3. matchResultnull の場合、次を行う:
      1. searchIndexAdvanceStringIndex(str, searchIndex, unicodeMatching) に設定する。
    4. それ以外の場合、
      1. matchEnd(? ToLength(? Get(splitter, "lastIndex"))) とする。
      2. matchEndmin(matchEnd, size) に設定する。
      3. matchEnd = lastMatchEnd の場合、次を行う:
        1. searchIndexAdvanceStringIndex(str, searchIndex, unicodeMatching) に設定する。
      4. それ以外の場合、
        1. substringstrlastMatchEnd から searchIndex までの部分文字列とする。
        2. CreateDataPropertyOrThrow(array, ! ToString(𝔽(lengthA)), substring) を実行する。
        3. lengthAlengthA + 1 に設定する。
        4. lengthA = lim の場合、array を返す。
        5. lastMatchEndmatchEnd に設定する。
        6. numberOfCaptures を ? LengthOfArrayLike(matchResult) とする。
        7. numberOfCapturesmax(numberOfCaptures - 1, 0) に設定する。
        8. captureIndex を 1 とする。
        9. captureIndexnumberOfCaptures の間、繰り返す:
          1. nextCapture を ? Get(matchResult, ! ToString(𝔽(captureIndex))) とする。
          2. CreateDataPropertyOrThrow(array, ! ToString(𝔽(lengthA)), nextCapture) を実行する。
          3. captureIndexcaptureIndex + 1 に設定する。
          4. lengthAlengthA + 1 に設定する。
          5. lengthA = lim の場合、array を返す。
        10. searchIndexlastMatchEnd に設定する。
  20. substringstrlastMatchEnd から size までの部分文字列とする。
  21. CreateDataPropertyOrThrow(array, ! ToString(𝔽(lengthA)), substring) を実行する。
  22. array を返す。

このメソッドの"name"プロパティの値は "[Symbol.split]" です。

Note 2

このメソッドは、このRegExpオブジェクトの"global"および"sticky"プロパティの値を無視します。

22.2.6.15 get RegExp.prototype.sticky

RegExp.prototype.stickyは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. cu をコード単位0x0079(LATIN SMALL LETTER Y)とする。
  3. RegExpHasFlag(regexp, cu) を返す。

22.2.6.16 RegExp.prototype.test ( str )

このメソッドは呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. string を ? ToString(str) とする。
  4. match を ? RegExpExec(regexp, string) とする。
  5. matchnull の場合、false を返す。
  6. true を返す。

22.2.6.17 RegExp.prototype.toString ( )

  1. regexpthis値とする。
  2. regexp がObjectでない場合、TypeError 例外をスローする。
  3. pattern を ? ToString(? Get(regexp, "source")) とする。
  4. flags を ? ToString(? Get(regexp, "flags")) とする。
  5. result"/"pattern"/"、および flags の文字列連結とする。
  6. result を返す。
Note

返されるStringは、このオブジェクトと同じ動作を持つ別のRegExpオブジェクトに評価される RegularExpressionLiteral の形式を持ちます。

22.2.6.18 get RegExp.prototype.unicode

RegExp.prototype.unicodeは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. cu をコード単位0x0075(LATIN SMALL LETTER U)とする。
  3. RegExpHasFlag(regexp, cu) を返す。

22.2.6.19 get RegExp.prototype.unicodeSets

RegExp.prototype.unicodeSetsは、setアクセサー関数が undefined であるアクセサープロパティです。そのgetアクセサー関数は呼び出されたとき、次の手順を実行します:

  1. regexpthis値とする。
  2. cu をコード単位0x0076(LATIN SMALL LETTER V)とする。
  3. RegExpHasFlag(regexp, cu) を返す。

22.2.7 RegExpマッチングのための抽象操作

22.2.7.1 RegExpExec ( regexp, str )

The abstract operation RegExpExec takes arguments regexp (Object) and str (String) and returns Objectまたはnullのいずれかを含む正常完了、またはスロー完了のいずれか. It performs the following steps when called:

  1. exec を ? Get(regexp, "exec") とする。
  2. IsCallable(exec) が true の場合、次を行う:
    1. result を ? Call(exec, regexp, « str ») とする。
    2. result がObjectでなく、かつ resultnull でない場合、TypeError 例外をスローする。
    3. result を返す。
  3. RequireInternalSlot(regexp, [[RegExpMatcher]]) を実行する。
  4. RegExpBuiltinExec(regexp, str) を返す。
Note

呼び出し可能な"exec"プロパティが見つからない場合、このアルゴリズムは組み込みRegExpマッチングアルゴリズムの使用を試みるようにフォールバックします。これは、正規表現を使用するほとんどの組み込みアルゴリズムが"exec"の動的プロパティ検索を行わなかった以前の版向けに書かれたコードに対して互換性のある動作を提供します。

22.2.7.2 RegExpBuiltinExec ( regexp, str )

The abstract operation RegExpBuiltinExec takes arguments regexp (初期化済みRegExpインスタンス) and str (String) and returns Array exotic objectまたはnullのいずれかを含む正常完了、またはスロー完了のいずれか. It performs the following steps when called:

  1. lengthstr の長さとする。
  2. lastIndex(? ToLength(! Get(regexp, "lastIndex"))) とする。
  3. flagsregexp.[[OriginalFlags]] とする。
  4. flags"g" を含む場合、globaltrue とする。そうでない場合、globalfalse とする。
  5. flags"y" を含む場合、stickytrue とする。そうでない場合、stickyfalse とする。
  6. flags"d" を含む場合、hasIndicestrue とする。そうでない場合、hasIndicesfalse とする。
  7. globalfalse かつ stickyfalse の場合、lastIndex を0に設定する。
  8. matcherregexp.[[RegExpMatcher]] とする。
  9. flags"u" を含むか、または flags"v" を含む場合、fullUnicodetrue とする。そうでない場合、fullUnicodefalse とする。
  10. matchSucceededfalse とする。
  11. fullUnicodetrue の場合、inputStringToCodePoints(str) とする。そうでない場合、input を、str の要素であるコード単位を要素とするListとする。
  12. NOTE: input の各要素はcharacterと見なされる。
  13. matchSucceededfalse の間、繰り返す:
    1. lastIndex > length の場合、次を行う:
      1. globaltrue または stickytrue の場合、次を行う:
        1. Set(regexp, "lastIndex", +0𝔽, true) を実行する。
      2. null を返す。
    2. inputIndex を、str の要素 lastIndex から得られたcharacterの input 内のインデックスとする。
    3. rmatcher(input, inputIndex) とする。
    4. rfailure の場合、次を行う:
      1. stickytrue の場合、次を行う:
        1. Set(regexp, "lastIndex", +0𝔽, true) を実行する。
        2. null を返す。
      2. lastIndexAdvanceStringIndex(str, lastIndex, fullUnicode) に設定する。
    5. それ以外の場合、
      1. Assert: rMatchStateである。
      2. matchSucceededtrue に設定する。
  14. endIndexr.[[EndIndex]] とする。
  15. fullUnicodetrue の場合、endIndexGetStringIndex(str, endIndex) に設定する。
  16. globaltrue または stickytrue の場合、次を行う:
    1. Set(regexp, "lastIndex", 𝔽(endIndex), true) を実行する。
  17. nr.[[Captures]] 内の要素数とする。
  18. Assert: n = regexp.[[RegExpRecord]].[[CapturingGroupsCount]]
  19. Assert: n < 232 - 1。
  20. array を ! ArrayCreate(n + 1) とする。
  21. Assert: array"length"プロパティの数学的値は n + 1 である。
  22. CreateDataPropertyOrThrow(array, "index", 𝔽(lastIndex)) を実行する。
  23. CreateDataPropertyOrThrow(array, "input", str) を実行する。
  24. matchMatch Record { [[StartIndex]]: lastIndex, [[EndIndex]]: endIndex } とする。
  25. indices を新しい空のListとする。
  26. groupNames を新しい空のListとする。
  27. matchindices に追加する。
  28. matchedSubstrGetMatchString(str, match) とする。
  29. CreateDataPropertyOrThrow(array, "0", matchedSubstr) を実行する。
  30. regexp が任意の GroupName を含む場合、次を行う:
    1. groupsOrdinaryObjectCreate(null) とする。
    2. hasGroupstrue とする。
  31. それ以外の場合、
    1. groupsundefined とする。
    2. hasGroupsfalse とする。
  32. CreateDataPropertyOrThrow(array, "groups", groups) を実行する。
  33. matchedGroupNames を新しい空のListとする。
  34. 1 ≤ in である各整数 i について、昇順に、次を行う:
    1. captureIr.[[Captures]]i番目 の要素とする。
    2. captureIundefined の場合、次を行う:
      1. capturedValueundefined とする。
      2. undefinedindices に追加する。
    3. それ以外の場合、
      1. captureStartcaptureI.[[StartIndex]] とする。
      2. captureEndcaptureI.[[EndIndex]] とする。
      3. fullUnicodetrue の場合、次を行う:
        1. captureStartGetStringIndex(str, captureStart) に設定する。
        2. captureEndGetStringIndex(str, captureEnd) に設定する。
      4. captureMatch Record { [[StartIndex]]: captureStart, [[EndIndex]]: captureEnd } とする。
      5. capturedValueGetMatchString(str, capture) とする。
      6. captureindices に追加する。
    4. CreateDataPropertyOrThrow(array, ! ToString(𝔽(i)), capturedValue) を実行する。
    5. regexpi番目 のキャプチャが GroupName で定義されていた場合、次を行う:
      1. s をその GroupNameCapturingGroupNameとする。
      2. matchedGroupNamess を含む場合、次を行う:
        1. Assert: capturedValueundefined である。
        2. undefinedgroupNames に追加する。
      3. それ以外の場合、
        1. capturedValueundefined でない場合、smatchedGroupNames に追加する。
        2. NOTE: s という名前のグループが複数ある場合、この時点で groups はすでに s プロパティを持っている可能性がある。しかし、groups はすべてのプロパティが書き込み可能なデータプロパティである通常のオブジェクトであるため、CreateDataPropertyOrThrow の呼び出しはそれでも成功することが保証される。
        3. CreateDataPropertyOrThrow(groups, s, capturedValue) を実行する。
        4. sgroupNames に追加する。
    6. それ以外の場合、
      1. undefinedgroupNames に追加する。
  35. hasIndicestrue の場合、次を行う:
    1. indicesArrayMakeMatchIndicesIndexPairArray(str, indices, groupNames, hasGroups) とする。
    2. CreateDataPropertyOrThrow(array, "indices", indicesArray) を実行する。
  36. array を返す。

22.2.7.3 AdvanceStringIndex ( str, index, unicode )

The abstract operation AdvanceStringIndex takes arguments str (a String), index (a non-negative integer), and unicode (a Boolean) and returns a non-negative integer. It performs the following steps when called:

  1. Assert: index ≤ 253 - 1。
  2. unicodefalse の場合、index + 1 を返す。
  3. lengthstr の長さとする。
  4. index + 1 ≥ length の場合、index + 1 を返す。
  5. cpCodePointAt(str, index) とする。
  6. index + cp.[[CodeUnitCount]] を返す。

22.2.7.4 GetStringIndex ( str, codePointIndex )

The abstract operation GetStringIndex takes arguments str (String) and codePointIndex (非負整数) and returns 非負整数. これは、6.1.4 で説明されるように str をUTF-16符号化コードポイントの列として解釈し、そのようなインデックスが存在する場合、コードポイントインデックス codePointIndex に対応するコード単位インデックスを返します。存在しない場合、str の長さを返します。 It performs the following steps when called:

  1. str が空のStringである場合、0を返す。
  2. lenstr の長さとする。
  3. codeUnitCount を0とする。
  4. codePointCount を0とする。
  5. codeUnitCount < len の間、繰り返す:
    1. codePointCount = codePointIndex の場合、codeUnitCount を返す。
    2. cpCodePointAt(str, codeUnitCount) とする。
    3. codeUnitCountcodeUnitCount + cp.[[CodeUnitCount]] に設定する。
    4. codePointCountcodePointCount + 1 に設定する。
  6. len を返す。

22.2.7.5 Match Record

Match Record は、正規表現マッチまたはキャプチャの開始インデックスと終了インデックスをカプセル化するために使用されるRecord値です。

Match Recordは、Table 67 に列挙されているフィールドを持ちます。

Table 67: Match Record Fields
フィールド名 意味
[[StartIndex]] 非負整数 マッチが始まる(包含)文字列の先頭からのコード単位数。
[[EndIndex]] [[StartIndex]]以上の整数 マッチが終わる(排他)文字列の先頭からのコード単位数。

22.2.7.6 GetMatchString ( str, match )

The abstract operation GetMatchString takes arguments str (String) and match (Match Record) and returns String. It performs the following steps when called:

  1. Assert: match.[[StartIndex]]match.[[EndIndex]]str の長さ。
  2. strmatch.[[StartIndex]] から match.[[EndIndex]] までの部分文字列を返す。

22.2.7.7 GetMatchIndexPair ( str, match )

The abstract operation GetMatchIndexPair takes arguments str (String) and match (Match Record) and returns Array. It performs the following steps when called:

  1. Assert: match.[[StartIndex]]match.[[EndIndex]]str の長さ。
  2. CreateArrayFromList𝔽(match.[[StartIndex]]), 𝔽(match.[[EndIndex]]) ») を返す。

22.2.7.8 MakeMatchIndicesIndexPairArray ( str, indices, groupNames, hasGroups )

The abstract operation MakeMatchIndicesIndexPairArray takes arguments str (String), indices (Match RecordまたはundefinedのいずれかのList), groupNames (StringまたはundefinedのいずれかのList), and hasGroups (Boolean) and returns Array. It performs the following steps when called:

  1. nindices 内の要素数とする。
  2. Assert: n < 232 - 1。
  3. Assert: groupNamesn - 1 個の要素を持つ。
  4. NOTE: groupNames Listは、indices[1]から始まる indices Listと整列した要素を含む。
  5. array を ! ArrayCreate(n) とする。
  6. hasGroupstrue の場合、次を行う:
    1. groupsOrdinaryObjectCreate(null) とする。
  7. それ以外の場合、
    1. groupsundefined とする。
  8. CreateDataPropertyOrThrow(array, "groups", groups) を実行する。
  9. 0 ≤ i < n である各整数 i について、昇順に、次を行う:
    1. matchIndicesindices[i] とする。
    2. matchIndicesundefined でない場合、次を行う:
      1. matchIndexPairGetMatchIndexPair(str, matchIndices) とする。
    3. それ以外の場合、
      1. matchIndexPairundefined とする。
    4. CreateDataPropertyOrThrow(array, ! ToString(𝔽(i)), matchIndexPair) を実行する。
    5. i > 0 の場合、次を行う:
      1. namegroupNames[i - 1] とする。
      2. nameundefined でない場合、次を行う:
        1. Assert: groupsundefined でない。
        2. NOTE: name という名前のグループが複数ある場合、この時点で groups はすでに name プロパティを持っている可能性がある。しかし、groups はすべてのプロパティが書き込み可能なデータプロパティである通常のオブジェクトであるため、CreateDataPropertyOrThrow の呼び出しはそれでも成功することが保証される。
        3. CreateDataPropertyOrThrow(groups, name, matchIndexPair) を実行する。
  10. array を返す。

22.2.8 RegExpインスタンスのプロパティ

RegExpインスタンスは、RegExpプロトタイプオブジェクトからプロパティを継承する通常のオブジェクトです。RegExpインスタンスは内部スロット [[OriginalSource]][[OriginalFlags]][[RegExpRecord]]、および [[RegExpMatcher]] を持ちます。[[RegExpMatcher]] 内部スロットの値は、RegExpオブジェクトの PatternAbstract Closure表現です。

Note

ECMAScript 2015より前は、RegExpインスタンスは独自のデータプロパティ"source""global""ignoreCase"、および"multiline"を持つものとして指定されていました。現在、これらのプロパティはRegExp.prototypeのアクセサープロパティとして指定されています。

RegExpインスタンスは、以下のプロパティも持ちます:

22.2.8.1 lastIndex

"lastIndex"プロパティの値は、次のマッチを開始するStringインデックスを指定します。使用されるとき、これは整数Numberに強制変換されます(22.2.7.2 を参照)。このプロパティは属性 { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false } を持たなければなりません。

22.2.9 RegExp String Iteratorオブジェクト

RegExp String Iterator は、ある特定のStringインスタンスオブジェクトに対して、ある特定のRegExpインスタンスオブジェクトとマッチさせながら行う特定の反復を表すオブジェクトです。RegExp String Iteratorオブジェクトには名前付きコンストラクターはありません。代わりに、RegExp String IteratorオブジェクトはRegExpインスタンスオブジェクトの特定のメソッドを呼び出すことによって作成されます。

22.2.9.1 CreateRegExpStringIterator ( regexp, str, global, fullUnicode )

The abstract operation CreateRegExpStringIterator takes arguments regexp (Object), str (String), global (Boolean), and fullUnicode (Boolean) and returns Object. It performs the following steps when called:

  1. iteratorOrdinaryObjectCreate(%RegExpStringIteratorPrototype%, « [[IteratingRegExp]], [[IteratedString]], [[Global]], [[Unicode]], [[Done]] ») とする。
  2. iterator.[[IteratingRegExp]]regexp に設定する。
  3. iterator.[[IteratedString]]str に設定する。
  4. iterator.[[Global]]global に設定する。
  5. iterator.[[Unicode]]fullUnicode に設定する。
  6. iterator.[[Done]]false に設定する。
  7. iterator を返す。

22.2.9.2 %RegExpStringIteratorPrototype%オブジェクト

%RegExpStringIteratorPrototype%オブジェクトは以下の通りです:

  • すべてのRegExp String Iteratorオブジェクトによって継承されるプロパティを持つ。
  • 通常のオブジェクトである。
  • [[Prototype]]内部スロットを持ち、その値は %Iterator.prototype% である。
  • 以下のプロパティを持つ:

22.2.9.2.1 %RegExpStringIteratorPrototype%.next ( )

  1. iteratorObjthis値とする。
  2. iteratorObj がObjectでない場合、TypeError 例外をスローする。
  3. iteratorObjRegExp String Iteratorオブジェクトインスタンスのすべての内部スロット(22.2.9.3 を参照)を持たない場合、TypeError 例外をスローする。
  4. iteratorObj.[[Done]]true の場合、次を行う:
    1. CreateIteratorResultObject(undefined, true) を返す。
  5. regexpiteratorObj.[[IteratingRegExp]] とする。
  6. striteratorObj.[[IteratedString]] とする。
  7. globaliteratorObj.[[Global]] とする。
  8. fullUnicodeiteratorObj.[[Unicode]] とする。
  9. match を ? RegExpExec(regexp, str) とする。
  10. matchnull の場合、次を行う:
    1. iteratorObj.[[Done]]true に設定する。
    2. CreateIteratorResultObject(undefined, true) を返す。
  11. globalfalse の場合、次を行う:
    1. iteratorObj.[[Done]]true に設定する。
    2. CreateIteratorResultObject(match, false) を返す。
  12. matchStr を ? ToString(? Get(match, "0")) とする。
  13. matchStr が空のStringである場合、次を行う:
    1. thisIndex(? ToLength(? Get(regexp, "lastIndex"))) とする。
    2. nextIndexAdvanceStringIndex(str, thisIndex, fullUnicode) とする。
    3. Set(regexp, "lastIndex", 𝔽(nextIndex), true) を実行する。
  14. CreateIteratorResultObject(match, false) を返す。

22.2.9.2.2 %RegExpStringIteratorPrototype% [ %Symbol.toStringTag% ]

%Symbol.toStringTag%プロパティの初期値はString値 "RegExp String Iterator" です。

このプロパティの属性は { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } です。

22.2.9.3 RegExp String Iteratorインスタンスのプロパティ

RegExp String Iteratorインスタンスは、%RegExpStringIteratorPrototype%組み込みオブジェクトからプロパティを継承する通常のオブジェクトです。RegExp String Iteratorインスタンスは、最初に Table 68 に列挙されている内部スロットを持つように作成されます。

Table 68: Internal Slots of RegExp String Iterator Instances
内部スロット 説明
[[IteratingRegExp]] Object 反復に使用される正規表現。IsRegExp([[IteratingRegExp]]) は初期状態で true です。
[[IteratedString]] String 反復対象のString値。
[[Global]] Boolean [[IteratingRegExp]] がglobalであるかどうかを示します。
[[Unicode]] Boolean [[IteratingRegExp]] がUnicodeモードであるかどうかを示します。
[[Done]] Boolean 反復が完了したかどうかを示します。