ページ表示設定

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. string を空の String とする。
  2. そうでない場合、
    1. NewTarget が undefined であり、value が Symbol である場合、SymbolDescriptiveString(value) を返す。
    2. string を ? ToString(value) とする。
  3. NewTarget が undefined である場合、string を返す。
  4. StringCreate(string, ? GetPrototypeFromConstructor(NewTarget, "%String.prototype%")) を返す。

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

String コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 次のプロパティを持ちます。

22.1.2.1 String.fromCharCode ( ...codeUnits )

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

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

  1. result を空の String とする。
  2. codeUnits の各要素 next について、次を行う。
    1. nextCU を、数値が ℝ(? ToUint16(next)) であるコード単位とする。
    2. result を result と nextCU の文字列連結に設定する。
  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. result を result と UTF16EncodeCodePoint(ℝ(nextCP)) の文字列連結に設定する。
  3. 表明: codePoints が空である場合、result は空の String である。
  4. result を返す。

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

22.1.2.3 String.prototype

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

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

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

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

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

  1. substitutionCount を substitutions の要素数とする。
  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. nextLiteralValue を ? Get(literals, ! ToString(𝔽(nextIndex))) とする。
    2. nextLiteral を ? ToString(nextLiteralValue) とする。
    3. result を result と nextLiteral の文字列連結に設定する。
    4. nextIndex + 1 = literalCount である場合、result を返す。
    5. nextIndex < substitutionCount である場合、
      1. nextSubValue を substitutions[nextIndex] とする。
      2. nextSub を ? ToString(nextSubValue) とする。
      3. result を result と nextSub の文字列連結に設定する。
    6. nextIndex を nextIndex + 1 に設定する。
注

この関数は Tagged Template(13.3.11)のタグ関数として使用することを意図しています。そのように呼び出された場合、最初の引数は well-formed な template オブジェクトとなり、rest パラメーターには置換値が含まれます。

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

String prototype オブジェクトは:

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

明示的に別段の規定がない限り、以下で定義される String prototype オブジェクトのメソッドは汎用ではなく、それらに渡される this 値は String 値、または String 値に初期化された [[StringData]] 内部スロットを持つオブジェクトのいずれかでなければなりません。

22.1.3.1 String.prototype.at ( index )

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. length を string の長さとする。
  5. k を ? ToAbsoluteIndex(index, length) とする。
  6. k < 0 または k ≥ length である場合、undefined を返す。
  7. string の k から k + 1 までの部分文字列を返す。

22.1.3.2 String.prototype.charAt ( position )

注 1

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

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. position を ? ToIntegerOrInfinity(position) に設定する。
  5. size を string の長さとする。
  6. position < 0 または position ≥ size である場合、空の String を返す。
  7. string の position から position + 1 までの部分文字列を返す。
注 2

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

22.1.3.3 String.prototype.charCodeAt ( position )

注 1

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. position を ? ToIntegerOrInfinity(position) に設定する。
  5. size を string の長さとする。
  6. position < 0 または position ≥ size である場合、NaN を返す。
  7. String string 内のインデックス position にあるコード単位の数値に対する Number 値を返す。
注 2

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

22.1.3.4 String.prototype.codePointAt ( position )

注 1

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. position を ? ToIntegerOrInfinity(position) に設定する。
  5. size を string の長さとする。
  6. position < 0 または position ≥ size である場合、undefined を返す。
  7. codePoint を CodePointAt(string, position) とする。
  8. 𝔽(codePoint.[[CodePoint]]) を返す。
注 2

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

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

注 1

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

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

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

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

注 2

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

22.1.3.6 String.prototype.constructor

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

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. isRegexp を ? IsRegExp(searchString) とする。
  5. isRegexp が true である場合、TypeError 例外をスローする。
  6. searchString を ? ToString(searchString) に設定する。
  7. length を string の長さとする。
  8. endPosition が undefined である場合、end を length とする。そうでない場合、end を ? ToIntegerOrInfinity(endPosition) を 0 と length の間にクランプした結果とする。
  9. searchLength を searchString の長さとする。
  10. searchLength = 0 である場合、true を返す。
  11. start を end - searchLength とする。
  12. start < 0 である場合、false を返す。
  13. substring を string の start から end までの部分文字列とする。
  14. substring が searchString である場合、true を返す。
  15. false を返す。
注 1

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

注 2

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

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. isRegexp を ? IsRegExp(searchString) とする。
  5. isRegexp が true である場合、TypeError 例外をスローする。
  6. searchString を ? ToString(searchString) に設定する。
  7. length を string の長さとする。
  8. start を ? ToIntegerOrInfinity(position) を 0 と length の間にクランプした結果とする。
  9. 表明: position が undefined である場合、start は 0 である。
  10. index を StringIndexOf(string, searchString, start) とする。
  11. index が not-found である場合、false を返す。
  12. true を返す。
注 1

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

注 2

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

注 3

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

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

注 1

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. searchString を ? ToString(searchString) に設定する。
  5. length を string の長さとする。
  6. start を ? ToIntegerOrInfinity(position) を 0 と length の間にクランプした結果とする。
  7. 表明: position が undefined である場合、start は 0 である。
  8. result を StringIndexOf(string, searchString, start) とする。
  9. result が not-found である場合、-1𝔽 を返す。
  10. 𝔽(result) を返す。
注 2

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

22.1.3.10 String.prototype.isWellFormed ( )

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

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

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

注 1

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. searchString を ? ToString(searchString) に設定する。
  5. numberPosition を ? ToNumber(position) とする。
  6. length を string の長さとする。
  7. searchLength を searchString の長さとする。
  8. maxStart を length - searchLength とする。
  9. maxStart < 0 である場合、-1𝔽 を返す。
  10. numberPosition が NaN である場合、start を maxStart とする。そうでない場合、start を ! ToIntegerOrInfinity(numberPosition) を 0 と maxStart の間にクランプした結果とする。
  11. 表明: position が undefined である場合、start は maxStart である。
  12. result を StringLastIndexOf(string, searchString, start) とする。
  13. result が not-found である場合、-1𝔽 を返す。
  14. 𝔽(result) を返す。
注 2

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

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

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

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

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

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

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

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

注 1

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

注 2

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

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

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

// ṩ LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE と
// ṩ 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 と
// ḍ̇ LATIN SMALL LETTER D WITH DOT BELOW + COMBINING DOT ABOVE
"\u1E0B\u0323".localeCompare("\u1E0D\u0307")

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

正準等価性の定義および解説については Unicode 標準の第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 標準の第3章3.7節で定義される Unicode 互換等価または互換分解を尊重しないことが推奨されます。

注 3

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

22.1.3.13 String.prototype.match ( regexpOrPattern )

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

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

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

22.1.3.14 String.prototype.matchAll ( regexpOrPattern )

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

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

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

22.1.3.15 String.prototype.normalize ( [ form ] )

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. form が undefined である場合、form を "NFC" に設定する。
  5. そうでない場合、form を ? ToString(form) に設定する。
  6. form が "NFC"、"NFD"、"NFKC"、または "NFKD" のいずれでもない場合、RangeError 例外をスローする。
  7. normal を、最新の Unicode 標準の Normalization Forms で規定されるとおり、string を form で指定された正規化形式へ正規化した結果である String 値とする。
  8. normal を返す。
注

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

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

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

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

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

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

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

22.1.3.17.1 StringPaddingBuiltinsImpl ( thisValue, maxLength, fillString, placement )

抽象操作 StringPaddingBuiltinsImpl。引数 thisValue (ECMAScript 言語値)、maxLength (ECMAScript 言語値)、fillString (ECMAScript 言語値) および placement ((start または end))。戻り値:(正常完了 (値:String) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. string を ? ToString(thisValue) とする。
  2. intMaxLength を ℝ(? ToLength(maxLength)) とする。
  3. stringLength を string の長さとする。
  4. intMaxLength ≤ stringLength である場合、string を返す。
  5. fillString が undefined である場合、fillString をコード単位 0x0020 (SPACE) のみからなる String 値に設定する。
  6. そうでない場合、fillString を ? ToString(fillString) に設定する。
  7. StringPad(string, intMaxLength, fillString, placement) を返す。

22.1.3.17.2 StringPad ( string, maxLength, fillString, placement )

抽象操作 StringPad。引数 string (String)、maxLength (非負整数)、fillString (String) および placement ((start または end))。戻り値:String。 呼び出されると、次の手順を実行する。

  1. stringLength を string の長さとする。
  2. maxLength ≤ stringLength である場合、string を返す。
  3. fillString が空の String である場合、string を返す。
  4. fillLength を maxLength - stringLength とする。
  5. truncatedStringFiller を、fillString を繰り返し連結し、長さ fillLength に切り詰めた String 値とする。
  6. placement が start である場合、truncatedStringFiller と string の文字列連結を返す。
  7. string と truncatedStringFiller の文字列連結を返す。
注 1

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

注 2

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

22.1.3.17.3 ToZeroPaddedDecimalString ( n, minLength )

抽象操作 ToZeroPaddedDecimalString。引数 n (非負整数) および minLength (非負整数)。戻り値:String。 呼び出されると、次の手順を実行する。

  1. string を、n を10進数として整形した String 表現とする。
  2. StringPad(string, minLength, "0", start) を返す。

22.1.3.18 String.prototype.repeat ( count )

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

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

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

注 2

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

22.1.3.19 String.prototype.replace ( searchValue, replaceValue )

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. searchValue が Object である場合、
    1. replacer を ? GetMethod(searchValue, %Symbol.replace%) とする。
    2. replacer が undefined でない場合、
      1. ? Call(replacer, searchValue, « thisValue, replaceValue ») を返す。
  4. string を ? ToString(thisValue) とする。
  5. searchString を ? ToString(searchValue) とする。
  6. functionalReplace を IsCallable(replaceValue) とする。
  7. functionalReplace が false である場合、
    1. replaceValue を ? ToString(replaceValue) に設定する。
  8. searchLength を searchString の長さとする。
  9. position を StringIndexOf(string, searchString, 0) とする。
  10. position が not-found である場合、string を返す。
  11. preceding を string の 0 から position までの部分文字列とする。
  12. following を string の position + searchLength から始まる部分文字列とする。
  13. functionalReplace が true である場合、
    1. replacement を ? ToString(? Call(replaceValue, undefined, « searchString, 𝔽(position), string »)) とする。
  14. そうでない場合、
    1. 表明: replaceValue は String である。
    2. captures を新しい空の List とする。
    3. replacement を ! GetSubstitution(searchString, string, position, captures, undefined, replaceValue) とする。
  15. preceding、replacement、および following の文字列連結を返す。
注

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

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

抽象操作 GetSubstitution。引数 matched (String)、string (String)、position (非負整数)、captures (リスト (要素:(String または undefined)))、namedCaptures ((Object または undefined)) および replacementTemplate (String)。戻り値:(正常完了 (値:String) または throw 完了)。 この抽象操作の目的において、10進数字とは 0x0030 (DIGIT ZERO) から 0x0039 (DIGIT NINE) までの閉区間内のコード単位です。 呼び出されると、次の手順を実行する。

  1. stringLength を string の長さとする。
  2. 表明: position ≤ stringLength。
  3. result を空の String とする。
  4. templateRemainder を replacementTemplate とする。
  5. templateRemainder が空の String でない間、次を繰り返す。
    1. 注記: 次の手順では、ref(templateRemainder の接頭辞)を分離し、refReplacement(その置換)を決定し、その置換を result に追加する。
    2. templateRemainder が "$$" で始まる場合、
      1. ref を "$$" とする。
      2. refReplacement を "$" とする。
    3. そうでなく、templateRemainder が "$`" で始まる場合、
      1. ref を "$`" とする。
      2. refReplacement を string の 0 から position までの部分文字列とする。
    4. そうでなく、templateRemainder が "$&" で始まる場合、
      1. ref を "$&" とする。
      2. refReplacement を matched とする。
    5. そうでなく、templateRemainder が "$'"(0x0024 (DOLLAR SIGN) に 0x0027 (APOSTROPHE) が続くもの)で始まる場合、
      1. ref を "$'" とする。
      2. matchLength を matched の長さとする。
      3. tailPosition を position + matchLength とする。
      4. refReplacement を string の min(tailPosition, stringLength) から始まる部分文字列とする。
      5. 注記: tailPosition が stringLength を超えることができるのは、この抽象操作が、"exec" プロパティが組込み %RegExp.prototype.exec% でないオブジェクトに対する %RegExp.prototype% の組込み %Symbol.replace% メソッドの呼出しによって起動された場合だけである。
    6. そうでなく、templateRemainder が "$" に1個以上の10進数字が続く形で始まる場合、
      1. templateRemainder が "$" に2個以上の10進数字が続く形で始まる場合、digitCount を 2 とする。そうでない場合、digitCount を 1 とする。
      2. digits を templateRemainder の 1 から 1 + digitCount までの部分文字列とする。
      3. index を ℝ(StringToNumber(digits)) とする。
      4. 表明: 0 ≤ index ≤ 99。
      5. captureLength を captures の要素数とする。
      6. index > captureLength かつ digitCount = 2 である場合、
        1. 注記: 2桁の置換パターンがキャプチャグループ数を超えるインデックスを指定する場合、1桁の置換パターンにリテラル数字が続くものとして扱われる。
        2. digitCount を 1 に設定する。
        3. digits を digits の 0 から 1 までの部分文字列に設定する。
        4. index を ℝ(StringToNumber(digits)) に設定する。
      7. ref を templateRemainder の 0 から 1 + digitCount までの部分文字列とする。
      8. 1 ≤ index ≤ captureLength である場合、
        1. capture を captures[index - 1] とする。
        2. capture が undefined である場合、
          1. refReplacement を空の String とする。
        3. そうでない場合、
          1. refReplacement を capture とする。
      9. そうでない場合、
        1. refReplacement を ref とする。
    7. そうでなく、templateRemainder が "$<" で始まる場合、
      1. gtPosition を StringIndexOf(templateRemainder, ">", 0) とする。
      2. gtPosition が not-found であるか、namedCaptures が undefined である場合、
        1. ref を "$<" とする。
        2. refReplacement を ref とする。
      3. そうでない場合、
        1. ref を templateRemainder の 0 から gtPosition + 1 までの部分文字列とする。
        2. groupName を templateRemainder の 2 から gtPosition までの部分文字列とする。
        3. 表明: namedCaptures は Object である。
        4. capture を ? Get(namedCaptures, groupName) とする。
        5. capture が undefined である場合、
          1. refReplacement を空の String とする。
        6. そうでない場合、
          1. refReplacement を ? ToString(capture) とする。
    8. そうでない場合、
      1. ref を templateRemainder の 0 から 1 までの部分文字列とする。
      2. refReplacement を ref とする。
    9. refLength を ref の長さとする。
    10. templateRemainder を templateRemainder の refLength から始まる部分文字列に設定する。
    11. result を result と refReplacement の文字列連結に設定する。
  6. result を返す。

22.1.3.20 String.prototype.replaceAll ( searchValue, replaceValue )

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. searchValue が Object である場合、
    1. isRegexp を ? IsRegExp(searchValue) とする。
    2. isRegexp が true である場合、
      1. flags を ? Get(searchValue, "flags") とする。
      2. ? RequireObjectCoercible(flags) を実行する。
      3. ? ToString(flags) が "g" を含まない場合、TypeError 例外をスローする。
    3. replacer を ? GetMethod(searchValue, %Symbol.replace%) とする。
    4. replacer が undefined でない場合、
      1. ? Call(replacer, searchValue, « thisValue, replaceValue ») を返す。
  4. string を ? ToString(thisValue) とする。
  5. searchString を ? ToString(searchValue) とする。
  6. functionalReplace を IsCallable(replaceValue) とする。
  7. functionalReplace が false である場合、
    1. replaceValue を ? ToString(replaceValue) に設定する。
  8. searchLength を searchString の長さとする。
  9. advanceBy を max(1, searchLength) とする。
  10. matchPositions を新しい空の List とする。
  11. position を StringIndexOf(string, searchString, 0) とする。
  12. position が not-found でない間、次を繰り返す。
    1. position を matchPositions に追加する。
    2. position を StringIndexOf(string, searchString, position + advanceBy) に設定する。
  13. endOfLastMatch を 0 とする。
  14. result を空の String とする。
  15. matchPositions の各要素 matchPosition について、次を行う。
    1. preserved を string の endOfLastMatch から matchPosition までの部分文字列とする。
    2. functionalReplace が true である場合、
      1. replacement を ? ToString(? Call(replaceValue, undefined, « searchString, 𝔽(matchPosition), string »)) とする。
    3. そうでない場合、
      1. 表明: replaceValue は String である。
      2. captures を新しい空の List とする。
      3. replacement を ! GetSubstitution(searchString, string, matchPosition, captures, undefined, replaceValue) とする。
    4. result を result、preserved、および replacement の文字列連結に設定する。
    5. endOfLastMatch を matchPosition + searchLength に設定する。
  16. endOfLastMatch < string の長さである場合、
    1. result を result と string の endOfLastMatch から始まる部分文字列の文字列連結に設定する。
  17. result を返す。

22.1.3.21 String.prototype.search ( regexpOrPattern )

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

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

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

22.1.3.22 String.prototype.slice ( start, end )

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. length を string の長さとする。
  5. from を ? ToClampedIndex(start, length) とする。
  6. end が undefined である場合、to を length とする。そうでない場合、to を ? ToClampedIndex(end, length) とする。
  7. from ≥ to である場合、空の String を返す。
  8. string の from から to までの部分文字列を返す。
注

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

22.1.3.23 String.prototype.split ( separator, limit )

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. separator が Object である場合、
    1. splitter を ? GetMethod(separator, %Symbol.split%) とする。
    2. splitter が undefined でない場合、
      1. ? Call(splitter, separator, « thisValue, limit ») を返す。
  4. string を ? ToString(thisValue) とする。
  5. limit が undefined である場合、lim を 232 - 1 とする。そうでない場合、lim を ℝ(? ToUint32(limit)) とする。
  6. separatorString を ? ToString(separator) とする。
  7. lim = 0 である場合、
    1. CreateArrayFromList(« ») を返す。
  8. separator が undefined である場合、
    1. CreateArrayFromList(« string ») を返す。
  9. separatorLength を separatorString の長さとする。
  10. separatorLength = 0 である場合、
    1. stringLength を string の長さとする。
    2. outLength を lim を 0 と stringLength の間にクランプした結果とする。
    3. head を string の 0 から outLength までの部分文字列とする。
    4. codeUnits を、head の要素であるコード単位の列からなる List とする。
    5. CreateArrayFromList(codeUnits) を返す。
  11. string が空の String である場合、CreateArrayFromList(« string ») を返す。
  12. substrings を新しい空の List とする。
  13. searchStart を 0 とする。
  14. matchIndex を StringIndexOf(string, separatorString, 0) とする。
  15. matchIndex が not-found でない間、次を繰り返す。
    1. substring を string の searchStart から matchIndex までの部分文字列とする。
    2. substring を substrings に追加する。
    3. substrings の要素数が lim である場合、CreateArrayFromList(substrings) を返す。
    4. searchStart を matchIndex + separatorLength に設定する。
    5. matchIndex を StringIndexOf(string, separatorString, searchStart) に設定する。
  16. substring を string の searchStart から始まる部分文字列とする。
  17. substring を substrings に追加する。
  18. CreateArrayFromList(substrings) を返す。
注 1

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

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

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

注 2

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

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. isRegexp を ? IsRegExp(searchString) とする。
  5. isRegexp が true である場合、TypeError 例外をスローする。
  6. searchString を ? ToString(searchString) に設定する。
  7. length を string の長さとする。
  8. start を ? ToIntegerOrInfinity(position) を 0 と length の間にクランプした結果とする。
  9. 表明: position が undefined である場合、start は 0 である。
  10. searchLength を searchString の長さとする。
  11. searchLength = 0 である場合、true を返す。
  12. end を start + searchLength とする。
  13. end > length である場合、false を返す。
  14. substring を string の start から end までの部分文字列とする。
  15. substring が searchString である場合、true を返す。
  16. false を返す。
注 1

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

注 2

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

22.1.3.25 String.prototype.substring ( start, end )

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

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

start が end より厳密に大きい場合、両者は入れ替えられます。

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. length を string の長さとする。
  5. finalStart を ? ToIntegerOrInfinity(start) を 0 と length の間にクランプした結果とする。
  6. 表明: start が undefined である場合、finalStart は 0 である。
  7. end が undefined である場合、finalEnd を length とする。そうでない場合、finalEnd を ? ToIntegerOrInfinity(end) を 0 と length の間にクランプした結果とする。
  8. from を min(finalStart, finalEnd) とする。
  9. to を max(finalStart, finalEnd) とする。
  10. string の from から to までの部分文字列を返す。
注

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

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

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

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

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

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

注

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

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

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

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

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

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

注

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

22.1.3.28 String.prototype.toLowerCase ( )

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. sText を StringToCodePoints(string) とする。
  5. lowerText を Unicode Default Case Conversion アルゴリズムに従った toLowercase(sText) とする。
  6. lowercaseString を CodePointsToString(lowerText) とする。
  7. lowercaseString を返す。

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

注 1

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

注 2

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

22.1.3.29 String.prototype.toString ( )

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

  1. ? ThisStringValue(this 値) を返す。
注

String オブジェクトについて、このメソッドは結果として valueOf メソッドと同じものを返します。

22.1.3.30 String.prototype.toUpperCase ( )

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

String が Unicode Default Case Conversion の toUppercase アルゴリズムを使用してマッピングされる点を除き、String.prototype.toLowerCase とまったく同じように動作します。

注

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

22.1.3.31 String.prototype.toWellFormed ( )

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

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

  1. thisValue を this 値とする。
  2. ? RequireObjectCoercible(thisValue) を実行する。
  3. string を ? ToString(thisValue) とする。
  4. stringLength を string の長さとする。
  5. k を 0 とする。
  6. result を空の String とする。
  7. k < stringLength の間、次を繰り返す。
    1. codePoint を CodePointAt(string, k) とする。
    2. codePoint.[[IsUnpairedSurrogate]] が true である場合、
      1. result を result と 0xFFFD (REPLACEMENT CHARACTER) の文字列連結に設定する。
    3. そうでない場合、
      1. result を result と UTF16EncodeCodePoint(codePoint.[[CodePoint]]) の文字列連結に設定する。
    4. k を k + codePoint.[[CodeUnitCount]] に設定する。
  8. result を返す。

22.1.3.32 String.prototype.trim ( )

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

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

  1. thisValue を this 値とする。
  2. ? TrimString(thisValue, start+end) を返す。
注

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

22.1.3.32.1 TrimString ( arg, where )

抽象操作 TrimString。引数 arg (ECMAScript 言語値) および where ((start、end または start+end))。戻り値:(正常完了 (値:String) または throw 完了)。 6.1.4 で説明されるように、arg を UTF-16 エンコードされたコードポイントの列として解釈します。 呼び出されると、次の手順を実行する。

  1. ? RequireObjectCoercible(arg) を実行する。
  2. string を ? ToString(arg) とする。
  3. where が start である場合、
    1. trimmedString を、string の先頭の空白を除去したコピーである String 値とする。
  4. そうでなく、where が end である場合、
    1. trimmedString を、string の末尾の空白を除去したコピーである String 値とする。
  5. そうでない場合、
    1. 表明: where は start+end である。
    2. trimmedString を、string の先頭および末尾の両方の空白を除去したコピーである String 値とする。
  6. trimmedString を返す。

空白の定義は WhiteSpace と LineTerminator の和集合です。Unicode コードポイントが Unicode 一般カテゴリ「Space_Separator」(「Zs」)に属するかどうかを判定するとき、コード単位列は 6.1.4 で規定される UTF-16 エンコードされたコードポイント列として解釈されます。

22.1.3.33 String.prototype.trimEnd ( )

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

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

  1. string を this 値とする。
  2. ? TrimString(string, end) を返す。
注

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

22.1.3.34 String.prototype.trimStart ( )

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

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

  1. string を this 値とする。
  2. ? TrimString(string, start) を返す。
注

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

22.1.3.35 String.prototype.valueOf ( )

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

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

22.1.3.35.1 ThisStringValue ( arg )

抽象操作 ThisStringValue。引数 arg (ECMAScript 言語値)。戻り値:(正常完了 (値:String) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. arg が String である場合、arg を返す。
  2. arg が Object であり、arg が [[StringData]] 内部スロットを持つ場合、
    1. string を arg.[[StringData]] とする。
    2. 表明: string は String である。
    3. string を返す。
  3. TypeError 例外をスローする。

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

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

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

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

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

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

String インスタンスは String 特殊オブジェクトであり、そのようなオブジェクトに対して規定された内部メソッドを持ちます。String インスタンスは String prototype オブジェクトからプロパティを継承します。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% オブジェクトは:

22.1.5.1.1 %StringIteratorPrototype%.next ( )

  1. ? GeneratorResume(this 値, 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 オブジェクトは正規表現と、それに関連付けられたフラグを含みます。

注

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

22.2.1 パターン

RegExp コンストラクターは、入力 pattern 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] 注 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 & - ! # % , : ; < = > @ ` ~ 注 2

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

22.2.1.1 Static Semantics: 早期エラー

注

この節は 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 に一致したソーステキストが、表 65 の「Property name and aliases」列に列挙されたUnicode プロパティ名またはプロパティ別名でない場合、Syntax Error です。
  • UnicodePropertyValue に一致したソーステキストが、PropertyValueAliases.txt に列挙された、UnicodePropertyName に一致したソーステキストによって与えられる Unicode プロパティまたはプロパティ別名に対するプロパティ値またはプロパティ値別名でない場合、Syntax Error です。
UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue
  • LoneUnicodePropertyNameOrValue に一致したソーステキストが、PropertyValueAliases.txt に列挙された General_Category (gc) プロパティの Unicode プロパティ値またはプロパティ値別名でもなく、表 66 の「Property name and aliases」列に列挙されたバイナリプロパティまたはバイナリプロパティ別名でもなく、表 67 の「Property name」列に列挙された文字列のバイナリプロパティでもない場合、Syntax Error です。
  • 包含する Pattern が [UnicodeSetsMode] パラメーターを持たず、LoneUnicodePropertyNameOrValue に一致したソーステキストが 表 67 の「Property name」列に列挙された文字列のバイナリプロパティである場合、Syntax Error です。
CharacterClassEscape :: P{ UnicodePropertyValueExpression } CharacterClass :: [^ ClassContents ] NestedClass :: [^ ClassContents ] ClassSetRange :: ClassSetCharacter - ClassSetCharacter

22.2.1.2 Static Semantics: CountLeftCapturingParensWithin ( parseNode )

抽象操作 CountLeftCapturingParensWithin。引数 parseNode (構文解析ノード)。戻り値:非負整数。 parseNode 内の左キャプチャ括弧の数を返します。左キャプチャ括弧とは、 Atom :: ( GroupSpecifieropt Disjunction ) 生成規則の ( 終端記号に一致する任意の ( パターン文字です。

注

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

呼び出されると、次の手順を実行する。

  1. 表明: parseNode は RegExp Pattern 文法内の生成規則のインスタンスである。
  2. parseNode 内に含まれる Atom :: ( GroupSpecifieropt Disjunction ) Parse Node の数を返す。

22.2.1.3 Static Semantics: CountLeftCapturingParensBefore ( parseNode )

抽象操作 CountLeftCapturingParensBefore。引数 parseNode (構文解析ノード)。戻り値:非負整数。 包含する pattern 内で parseNode の左側に現れる左キャプチャ括弧の数を返します。

注

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

呼び出されると、次の手順を実行する。

  1. 表明: parseNode は RegExp Pattern 文法内の生成規則のインスタンスである。
  2. pattern を parseNode を含む Pattern とする。
  3. pattern 内に含まれ、parseNode より前に現れるか、parseNode を含む Atom :: ( GroupSpecifieropt Disjunction ) Parse Node の数を返す。

22.2.1.4 Static Semantics: MightBothParticipate ( x, y )

抽象操作 MightBothParticipate。引数 x (構文解析ノード) および y (構文解析ノード)。戻り値:Boolean。 呼び出されると、次の手順を実行する。

  1. 表明: x と y は同じ包含する Pattern を持つ。
  2. 包含する Pattern が Disjunction :: Alternative | Disjunction Parse Node を含み、x が Alternative 内に含まれ、y が派生した Disjunction 内に含まれるか、または x が派生した Disjunction 内に含まれ、y が Alternative 内に含まれる場合、false を返す。
  3. true を返す。

22.2.1.5 Static Semantics: CapturingGroupNumber

構文指向操作 CapturingGroupNumber。引数なし。戻り値:正の整数。

注

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

次の生成規則ごとに定義される。

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

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

22.2.1.6 Static Semantics: IsCharacterClass

構文指向操作 IsCharacterClass。引数なし。戻り値:Boolean。

注

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

次の生成規則ごとに定義される。

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

構文指向操作 CharacterValue。引数なし。戻り値:非負整数。

注 1

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

次の生成規則ごとに定義される。

ClassAtom :: -
  1. U+002D (HYPHEN-MINUS) の数値を返す。
ClassAtomNoDash :: SourceCharacter but not one of \ or ] or -
  1. codePoint を SourceCharacter に一致したコードポイントとする。
  2. codePoint の数値を返す。
ClassEscape :: b
  1. U+0008 (BACKSPACE) の数値を返す。
ClassEscape :: -
  1. U+002D (HYPHEN-MINUS) の数値を返す。
CharacterEscape :: ControlEscape
  1. 表 63 に従う数値を返す。
表 63: 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. codePoint を AsciiLetter に一致したコードポイントとする。
  2. i を codePoint の数値とする。
  3. i を 32 で除算した余りを返す。
CharacterEscape :: 0 [lookahead ∉ DecimalDigit]
  1. U+0000 (NULL) の数値を返す。
注 2

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

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

22.2.1.8 Static Semantics: MayContainStrings

構文指向操作 MayContainStrings。引数なし。戻り値:Boolean。 次の生成規則ごとに定義される。

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 に一致したソーステキストが 表 67 の「Property name」列に列挙された文字列のバイナリプロパティである場合、true を返す。
  2. false を返す。
ClassUnion :: ClassSetRange ClassUnionopt
  1. ClassUnion が存在する場合、ClassUnion の MayContainStrings を返す。
  2. false を返す。
ClassUnion :: ClassSetOperand ClassUnionopt
  1. ClassSetOperand の MayContainStrings が true である場合、true を返す。
  2. ClassUnion が存在する場合、ClassUnion の MayContainStrings を返す。
  3. false を返す。
ClassIntersection :: ClassSetOperand && ClassSetOperand
  1. 最初の ClassSetOperand の MayContainStrings が false である場合、false を返す。
  2. 2番目の ClassSetOperand の MayContainStrings が false である場合、false を返す。
  3. true を返す。
ClassIntersection :: ClassIntersection && ClassSetOperand
  1. ClassIntersection の MayContainStrings が false である場合、false を返す。
  2. ClassSetOperand の MayContainStrings が false である場合、false を返す。
  3. true を返す。
ClassSubtraction :: ClassSetOperand -- ClassSetOperand
  1. 最初の ClassSetOperand の MayContainStrings を返す。
ClassSubtraction :: ClassSubtraction -- ClassSetOperand
  1. ClassSubtraction の MayContainStrings を返す。
ClassStringDisjunctionContents :: ClassString | ClassStringDisjunctionContents
  1. ClassString の MayContainStrings が true である場合、true を返す。
  2. ClassStringDisjunctionContents の MayContainStrings を返す。
ClassString :: [empty]
  1. true を返す。
ClassString :: NonEmptyClassString
  1. NonEmptyClassString の MayContainStrings を返す。
NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt
  1. NonEmptyClassString が存在する場合、true を返す。
  2. false を返す。

22.2.1.9 Static Semantics: GroupSpecifiersThatMatch ( thisGroupName )

抽象操作 GroupSpecifiersThatMatch。引数 thisGroupName (a GroupName Parse Node)。戻り値:リスト (要素:GroupSpecifier Parse Nodes)。 呼び出されると、次の手順を実行する。

  1. name を thisGroupName の CapturingGroupName とする。
  2. pattern を thisGroupName を含む Pattern とする。
  3. result を新しい空の List とする。
  4. pattern が含む各 GroupSpecifier groupSpecifier について、次を行う。
    1. groupSpecifier の CapturingGroupName が name である場合、
      1. groupSpecifier を result に追加する。
  5. result を返す。

22.2.1.10 Static Semantics: CapturingGroupName

構文指向操作 CapturingGroupName。引数なし。戻り値:String。 次の生成規則ごとに定義される。

GroupName :: < RegExpIdentifierName >
  1. nameUnescaped を RegExpIdentifierName の RegExpIdentifierCodePoints とする。
  2. CodePointsToString(nameUnescaped) を返す。

22.2.1.11 Static Semantics: RegExpIdentifierCodePoints

構文指向操作 RegExpIdentifierCodePoints。引数なし。戻り値:リスト (要素:コードポイント)。 次の生成規則ごとに定義される。

RegExpIdentifierName :: RegExpIdentifierStart
  1. codePoint を RegExpIdentifierStart の RegExpIdentifierCodePoint とする。
  2. « codePoint » を返す。
RegExpIdentifierName :: RegExpIdentifierName RegExpIdentifierPart
  1. codePoints を派生した RegExpIdentifierName の RegExpIdentifierCodePoints とする。
  2. codePoint を RegExpIdentifierPart の RegExpIdentifierCodePoint とする。
  3. codePoints と « codePoint » のリスト連結を返す。

22.2.1.12 Static Semantics: RegExpIdentifierCodePoint

構文指向操作 RegExpIdentifierCodePoint。引数なし。戻り値:コードポイント。 次の生成規則ごとに定義される。

RegExpIdentifierStart :: IdentifierStartChar
  1. IdentifierStartChar に一致したコードポイントを返す。
RegExpIdentifierPart :: IdentifierPartChar
  1. IdentifierPartChar に一致したコードポイントを返す。
RegExpIdentifierStart :: \ RegExpUnicodeEscapeSequence RegExpIdentifierPart :: \ RegExpUnicodeEscapeSequence
  1. 数値が RegExpUnicodeEscapeSequence の CharacterValue であるコードポイントを返す。
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 は、その関連フラグが u も v も含まない場合、BMP pattern です。それ以外の場合は Unicode pattern です。BMP pattern は、基本多言語面の範囲内にある Unicode コードポイントである16ビット値の列からなるものとして解釈された String に対してマッチします。Unicode pattern は、UTF-16 を使用してエンコードされた Unicode コードポイントからなるものとして解釈された String に対してマッチします。BMP pattern の動作を説明する文脈では、「文字」は単一の16ビット Unicode BMP コードポイントを意味します。Unicode pattern の動作を説明する文脈では、「文字」は UTF-16 エンコードされたコードポイント(6.1.4)を意味します。どちらの文脈でも、「文字値」は対応する未エンコードのコードポイントの数値を意味します。

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

注

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

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

実装は実際には UTF-16 への、または UTF-16 からのこのような変換を実行しなくてもかまいませんが、この仕様の意味論は、pattern matching の結果がそのような変換が実行されたかのようになることを要求します。

22.2.2.1 表記法

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

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

22.2.2.1.1 RegExp Record

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

次のフィールドを持ちます。

表 64: RegExp Record のフィールド
フィールド名 値 意味
[[IgnoreCase]] a Boolean RegExp の flags に "i" が現れるかどうかを示します
[[Multiline]] a Boolean RegExp の flags に "m" が現れるかどうかを示します
[[DotAll]] a Boolean RegExp の flags に "s" が現れるかどうかを示します
[[Unicode]] a Boolean RegExp の flags に "u" が現れるかどうかを示します
[[UnicodeSets]] a Boolean RegExp の flags に "v" が現れるかどうかを示します
[[CapturingGroupsCount]] a non-negative integer RegExp の pattern 内の左キャプチャ括弧の数

22.2.2.2 Runtime Semantics: CompilePattern

構文指向操作 CompilePattern。引数 regexpRecord (RegExpレコード)。戻り値:an Abstract Closure that takes a List of characters and a non-negative integer and returns either a MatchState or failure。 次の生成規則ごとに定義される。

Pattern :: Disjunction
  1. m を、引数 regexpRecord および forward を指定した Disjunction の CompileSubpattern とする。
  2. regexpRecord と m を捕捉し、パラメーター (input, index) を持ち、呼び出されたときに次の手順を実行する新しい Abstract Closure を返す。
    1. 表明: input は文字の List である。
    2. 表明: 0 ≤ index ≤ input の要素数。
    3. c を、何も捕捉せず、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
      1. 表明: y は MatchState である。
      2. y を返す。
    4. capability を、1 から regexpRecord.[[CapturingGroupsCount]] までのインデックスを持つ、regexpRecord.[[CapturingGroupsCount]] 個の undefined 値からなる List とする。
    5. x を MatchState { [[Input]]: input, [[EndIndex]]: index, [[Captures]]: capability } とする。
    6. m(x, c) を返す。
注

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

22.2.2.3 Runtime Semantics: CompileSubpattern

構文指向操作 CompileSubpattern。引数 regexpRecord (RegExpレコード) および direction ((forward または backward))。戻り値:Matcher。

注 1

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

次の生成規則ごとに定義される。

Disjunction :: Alternative | Disjunction
  1. m1 を、引数 regexpRecord および direction を指定した Alternative の CompileSubpattern とする。
  2. m2 を、引数 regexpRecord および direction を指定した Disjunction の CompileSubpattern とする。
  3. MatchTwoAlternatives(m1, m2) を返す。
注 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 を指定した Alternative の CompileSubpattern とする。
  2. m2 を、引数 regexpRecord および direction を指定した Term の CompileSubpattern とする。
  3. MatchSequence(m1, m2, direction) を返す。
注 3

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

Term :: Assertion
  1. 引数 regexpRecord を指定した Assertion の CompileAssertion を返す。
注 4

得られる Matcher は direction に依存しません。

Term :: Atom
  1. 引数 regexpRecord および direction を指定した Atom の CompileAtom を返す。
Term :: Atom Quantifier
  1. m を、引数 regexpRecord および direction を指定した Atom の CompileAtom とする。
  2. q を Quantifier の CompileQuantifier とする。
  3. 表明: q.[[Min]] ≤ q.[[Max]]。
  4. parenIndex を CountLeftCapturingParensBefore(Term) とする。
  5. parenCount を CountLeftCapturingParensWithin(Atom) とする。
  6. m、q、parenIndex、および parenCount を捕捉し、パラメーター (x, c) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: x は MatchState である。
    2. 表明: c は MatcherContinuation である。
    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 )

抽象操作 RepeatMatcher。引数 m (Matcher)、min (非負整数)、max ((非負整数 または +∞))、greedy (Boolean)、matchState (MatchState)、continue (MatcherContinuation)、parenIndex (非負整数) および parenCount (非負整数)。戻り値:(MatchState または failure)。 呼び出されると、次の手順を実行する。

  1. max = 0 である場合、continue(matchState) を返す。
  2. d を、m、min、max、greedy、matchState、continue、parenIndex、および parenCount を捕捉し、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
    1. 表明: y は MatchState である。
    2. min = 0 かつ y.[[EndIndex]] = matchState.[[EndIndex]] である場合、failure を返す。
    3. min = 0 である場合、min2 を 0 とする。そうでない場合、min2 を min - 1 とする。
    4. max = +∞ である場合、max2 を +∞ とする。そうでない場合、max2 を max - 1 とする。
    5. RepeatMatcher(m, min2, max2, greedy, y, continue, parenIndex, parenCount) を返す。
  3. capability を matchState.[[Captures]] のコピーとする。
  4. parenIndex + 1 から parenIndex + parenCount までの閉区間内の各整数 k について、capability[k] を undefined に設定する。
  5. input を matchState.[[Input]] とする。
  6. e を matchState.[[EndIndex]] とする。
  7. xr を MatchState { [[Input]]: input, [[EndIndex]]: e, [[Captures]]: capability } とする。
  8. min ≠ 0 である場合、m(xr, d) を返す。
  9. greedy が false である場合、
    1. z を continue(matchState) とする。
    2. z が failure でない場合、z を返す。
    3. m(xr, d) を返す。
  10. z を m(xr, d) とする。
  11. z が failure でない場合、z を返す。
  12. continue(matchState) を返す。
注 1

Atom の後に Quantifier が続く場合、Atom は Quantifier によって指定された回数だけ繰り返されます。Quantifier は非貪欲である場合があり、その場合 Atom pattern は後続部分に依然として一致しながら可能な限り少ない回数繰り返されます。または貪欲である場合があり、その場合 Atom pattern は後続部分に依然として一致しながら可能な限り多い回数繰り返されます。一致する入力文字列ではなく Atom pattern 自体が繰り返されるため、Atom の異なる繰返しは異なる入力部分文字列に一致できます。

注 2

Atom と正規表現の後続部分のすべてに選択点がある場合、まず Atom が可能な限り多い(非貪欲の場合は可能な限り少ない)回数マッチされます。後続部分内のすべての選択肢は、Atom の最後の繰返しの次の選択肢へ進む前に試されます。Atom の最後(nth)の繰返し内のすべての選択肢は、Atom の最後から2番目(n - 1)st の繰返し内の次の選択肢へ進む前に試されます。その時点で、Atom のより多い、または少ない繰返しが可能になっていることが判明する場合があります。これらは、(再び、可能な限り少ないか多い回数から開始して)(n - 1)st の Atom の繰返し内の次の選択肢へ進む前に使い果たされ、以下同様です。

次を比較してください。

/a[a-z]{2,4}/.exec("abcdefghi")

これは "abcde" を返しますが、

/a[a-z]{2,4}?/.exec("abcdefghi")

は "abc" を返します。

また、次を考えてください。

/(aa|aabaac|ba|b|c)*/.exec("aabaac")

これは、上記の選択点の順序により、次の配列を返します。

["aaba", "ba"]

次のいずれでもありません。

["aabaac", "aabaac"]
["aabaac", "c"]

上記の選択点の順序は、2つの数(単項表記で表される)の最大公約数を計算する正規表現を書くために使用できます。次の例は 10 と 15 の gcd を計算します。

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

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

注 3

RepeatMatcher の手順 4 は、Atom が繰り返されるたびに Atom の capture をクリアします。その動作は正規表現

/(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 が含まれます。

注 4

RepeatMatcher の手順 2.b は、最小繰返し回数が満たされると、空の文字列に一致する Atom のそれ以上の展開は、さらなる繰返しについて考慮されないと規定しています。これにより、正規表現エンジンが次のような pattern で無限ループに陥ることを防ぎます。

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

または、やや複雑な次の例:

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

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

["b", ""]

22.2.2.3.2 EmptyMatcher ( )

抽象操作 EmptyMatcher。引数なし。戻り値:Matcher。 呼び出されると、次の手順を実行する。

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

22.2.2.3.3 MatchTwoAlternatives ( m1, m2 )

抽象操作 MatchTwoAlternatives。引数 m1 (Matcher) および m2 (Matcher)。戻り値:Matcher。 呼び出されると、次の手順を実行する。

  1. m1 と m2 を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. result を m1(matchState, continue) とする。
    4. result が failure でない場合、result を返す。
    5. m2(matchState, continue) を返す。

22.2.2.3.4 MatchSequence ( m1, m2, direction )

抽象操作 MatchSequence。引数 m1 (Matcher)、m2 (Matcher) および direction ((forward または backward))。戻り値:Matcher。 呼び出されると、次の手順を実行する。

  1. direction が forward である場合、
    1. m1 と m2 を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
      1. 表明: matchState は MatchState である。
      2. 表明: continue は MatcherContinuation である。
      3. d を、continue と m2 を捕捉し、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
        1. 表明: y は MatchState である。
        2. m2(y, continue) を返す。
      4. m1(matchState, d) を返す。
  2. 表明: direction は backward である。
  3. m1 と m2 を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. d を、continue と m1 を捕捉し、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
      1. 表明: y は MatchState である。
      2. m1(y, continue) を返す。
    4. m2(matchState, d) を返す。

22.2.2.4 Runtime Semantics: CompileAssertion

構文指向操作 CompileAssertion。引数 regexpRecord (RegExpレコード)。戻り値:Matcher。

注 1

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

次の生成規則ごとに定義される。

Assertion :: ^
  1. regexpRecord を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. input を matchState.[[Input]] とする。
    4. e を matchState.[[EndIndex]] とする。
    5. e = 0 であるか、regexpRecord.[[Multiline]] が true であり文字 input[e - 1] が LineTerminator に一致する場合、
      1. continue(matchState) を返す。
    6. failure を返す。
注 2

pattern とともに y フラグが使用される場合でも、^ は常に input の先頭、または(regexpRecord.[[Multiline]] が true の場合)行の先頭でのみ一致します。

Assertion :: $
  1. regexpRecord を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. input を matchState.[[Input]] とする。
    4. e を matchState.[[EndIndex]] とする。
    5. inputLength を input の要素数とする。
    6. e = inputLength であるか、regexpRecord.[[Multiline]] が true であり文字 input[e] が LineTerminator に一致する場合、
      1. continue(matchState) を返す。
    7. failure を返す。
Assertion :: \b
  1. regexpRecord を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. input を matchState.[[Input]] とする。
    4. e を matchState.[[EndIndex]] とする。
    5. a を IsWordChar(regexpRecord, input, e - 1) とする。
    6. b を IsWordChar(regexpRecord, input, e) とする。
    7. a が true かつ b が false であるか、a が false かつ b が true である場合、continue(matchState) を返す。
    8. failure を返す。
Assertion :: \B
  1. regexpRecord を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. input を matchState.[[Input]] とする。
    4. e を matchState.[[EndIndex]] とする。
    5. a を IsWordChar(regexpRecord, input, e - 1) とする。
    6. b を IsWordChar(regexpRecord, input, e) とする。
    7. a が true かつ b が true であるか、a が false かつ b が false である場合、continue(matchState) を返す。
    8. failure を返す。
Assertion :: (?= Disjunction )
  1. m を、引数 regexpRecord および forward を指定した Disjunction の CompileSubpattern とする。
  2. m を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. d を、何も捕捉せず、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
      1. 表明: y は MatchState である。
      2. y を返す。
    4. result を m(matchState, d) とする。
    5. result が failure である場合、failure を返す。
    6. 表明: result は MatchState である。
    7. capability を result.[[Captures]] とする。
    8. input を matchState.[[Input]] とする。
    9. xe を matchState.[[EndIndex]] とする。
    10. z を MatchState { [[Input]]: input, [[EndIndex]]: xe, [[Captures]]: capability } とする。
    11. continue(z) を返す。
注 3

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

たとえば、

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

は最初の b の直後の空の String に一致するため、次の配列を返します。

["", "aaa"]

先読み内へのバックトラッキングがないことを示すために、次を考えます。

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

この式は

["aba", "a"]

を返し、次ではありません。

["aaaba", "a"]
Assertion :: (?! Disjunction )
  1. m を、引数 regexpRecord および forward を指定した Disjunction の CompileSubpattern とする。
  2. m を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. d を、何も捕捉せず、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
      1. 表明: y は MatchState である。
      2. y を返す。
    4. result を m(matchState, d) とする。
    5. result が failure でない場合、failure を返す。
    6. continue(matchState) を返す。
注 4

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

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

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

["baaabaac", "ba", undefined, "abaac"]
Assertion :: (?<= Disjunction )
  1. m を、引数 regexpRecord および backward を指定した Disjunction の CompileSubpattern とする。
  2. m を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. d を、何も捕捉せず、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
      1. 表明: y は MatchState である。
      2. y を返す。
    4. result を m(matchState, d) とする。
    5. result が failure である場合、failure を返す。
    6. 表明: result は MatchState である。
    7. capability を result.[[Captures]] とする。
    8. input を matchState.[[Input]] とする。
    9. xe を matchState.[[EndIndex]] とする。
    10. z を MatchState { [[Input]]: input, [[EndIndex]]: xe, [[Captures]]: capability } とする。
    11. continue(z) を返す。
Assertion :: (?<! Disjunction )
  1. m を、引数 regexpRecord および backward を指定した Disjunction の CompileSubpattern とする。
  2. m を捕捉し、パラメーター (matchState, continue) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: matchState は MatchState である。
    2. 表明: continue は MatcherContinuation である。
    3. d を、何も捕捉せず、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
      1. 表明: y は MatchState である。
      2. y を返す。
    4. result を m(matchState, d) とする。
    5. result が failure でない場合、failure を返す。
    6. continue(matchState) を返す。

22.2.2.4.1 IsWordChar ( regexpRecord, input, e )

抽象操作 IsWordChar。引数 regexpRecord (RegExpレコード)、input (リスト (要素:文字)) および e (整数)。戻り値:Boolean。 呼び出されると、次の手順を実行する。

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

22.2.2.5 Runtime Semantics: CompileQuantifier

構文指向操作 CompileQuantifier。引数なし。戻り値:レコード (フィールド:[[Min]] (非負整数), [[Max]] ((非負整数 または +∞)), [[Greedy]] (Boolean))。 次の生成規則ごとに定義される。

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

22.2.2.6 Runtime Semantics: CompileQuantifierPrefix

構文指向操作 CompileQuantifierPrefix。引数なし。戻り値:レコード (フィールド:[[Min]] (非負整数), [[Max]] ((非負整数 または +∞)))。 次の生成規則ごとに定義される。

QuantifierPrefix :: *
  1. Record { [[Min]]: 0, [[Max]]: +∞ } を返す。
QuantifierPrefix :: +
  1. Record { [[Min]]: 1, [[Max]]: +∞ } を返す。
QuantifierPrefix :: ?
  1. Record { [[Min]]: 0, [[Max]]: 1 } を返す。
QuantifierPrefix :: { DecimalDigits }
  1. i を DecimalDigits の MV とする(12.9.3 を参照)。
  2. Record { [[Min]]: i, [[Max]]: i } を返す。
QuantifierPrefix :: { DecimalDigits ,}
  1. i を DecimalDigits の 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

構文指向操作 CompileAtom。引数 regexpRecord (RegExpレコード) および direction ((forward または backward))。戻り値:Matcher。

注 1

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

次の生成規則ごとに定義される。

Atom :: PatternCharacter
  1. char を PatternCharacter に一致した文字とする。
  2. charSet を文字 char を含む1要素の CharSet とする。
  3. CharacterSetMatcher(regexpRecord, charSet, false, direction) を返す。
Atom :: .
  1. charSet を AllCharacters(regexpRecord) とする。
  2. regexpRecord.[[DotAll]] が true でない場合、
    1. LineTerminator 生成規則の右辺にあるコードポイントに対応するすべての文字を charSet から削除する。
  3. CharacterSetMatcher(regexpRecord, charSet, false, direction) を返す。
Atom :: CharacterClass
  1. cc を、引数 regexpRecord を指定した CharacterClass の CompileCharacterClass とする。
  2. cs を cc.[[CharSet]] とする。
  3. regexpRecord.[[UnicodeSets]] が false であるか、cs のすべての CharSetElement が単一の文字からなる場合(cs が空の場合を含む)、CharacterSetMatcher(regexpRecord, cs, cc.[[Invert]], direction) を返す。
  4. 表明: cc.[[Invert]] は false である。
  5. listOfMatchers を Matchers の空の List とする。
  6. csSequences を新しい空の List とする。
  7. cs の各 CharSetElement s について、次を行う。
    1. s の長さ > 1 である場合、s を csSequences に追加する。
  8. csSequences を、各 CharSetElement の長さに従って降順に並べ替える。
  9. csSequences の各 CharSetElement s について、次を行う。
    1. 表明: s は2個以上のコードポイントの列である。
    2. remaining を s のコードポイントからなる List とする。
    3. cs2 を remaining の最後の要素を含む1要素の CharSet とする。
    4. m2 を CharacterSetMatcher(regexpRecord, cs2, false, direction) とする。
    5. remaining の最後の要素を削除する。
    6. remaining の各コードポイント c1 について、List の逆順で次を行う。
      1. cs1 を c1 を含む1要素の CharSet とする。
      2. m1 を CharacterSetMatcher(regexpRecord, cs1, false, direction) とする。
      3. m2 を MatchSequence(m1, m2, direction) に設定する。
    7. m2 を listOfMatchers に追加する。
  10. singles を、単一の文字からなる cs のすべての CharSetElement を含む CharSet とする。
  11. CharacterSetMatcher(regexpRecord, singles, false, direction) を listOfMatchers に追加する。
  12. cs が空の文字列を含む場合、EmptyMatcher() を listOfMatchers に追加する。
  13. m2 を listOfMatchers 内の最後の Matcher とする。
  14. listOfMatchers の各 Matcher m1 について、最後から2番目の要素から逆方向に反復して次を行う。
    1. m2 を MatchTwoAlternatives(m1, m2) に設定する。
  15. m2 を返す。
Atom :: ( GroupSpecifieropt Disjunction )
  1. m を、引数 regexpRecord および direction を指定した Disjunction の CompileSubpattern とする。
  2. parenIndex を CountLeftCapturingParensBefore(Atom) とする。
  3. direction、m、および parenIndex を捕捉し、パラメーター (x, c) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: x は MatchState である。
    2. 表明: c は MatcherContinuation である。
    3. d を、x、c、direction、および parenIndex を捕捉し、パラメーター (y) を持ち、呼び出されたときに次の手順を実行する新しい MatcherContinuation とする。
      1. 表明: y は MatchState である。
      2. capability を y.[[Captures]] のコピーとする。
      3. input を x.[[Input]] とする。
      4. xe を x.[[EndIndex]] とする。
      5. ye を y.[[EndIndex]] とする。
      6. direction が forward である場合、
        1. 表明: xe ≤ ye。
        2. r を CaptureRange { [[StartIndex]]: xe, [[EndIndex]]: ye } とする。
      7. そうでない場合、
        1. 表明: direction は backward である。
        2. 表明: ye ≤ xe。
        3. r を CaptureRange { [[StartIndex]]: ye, [[EndIndex]]: xe } とする。
      8. capability[parenIndex + 1] を r に設定する。
      9. z を MatchState { [[Input]]: input, [[EndIndex]]: ye, [[Captures]]: capability } とする。
      10. c(z) を返す。
    4. m(x, d) を返す。
注 2

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

Atom :: (? RegularExpressionModifiers : Disjunction )
  1. addModifiers を RegularExpressionModifiers に一致したソーステキストとする。
  2. removeModifiers を空の String とする。
  3. modifiedRer を UpdateModifiers(regexpRecord, CodePointsToString(addModifiers), removeModifiers) とする。
  4. 引数 modifiedRer および direction を指定した Disjunction の CompileSubpattern を返す。
Atom :: (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction )
  1. addModifiers を最初の RegularExpressionModifiers に一致したソーステキストとする。
  2. removeModifiers を2番目の RegularExpressionModifiers に一致したソーステキストとする。
  3. modifiedRer を UpdateModifiers(regexpRecord, CodePointsToString(addModifiers), CodePointsToString(removeModifiers)) とする。
  4. 引数 modifiedRer および direction を指定した Disjunction の CompileSubpattern を返す。
AtomEscape :: DecimalEscape
  1. n を DecimalEscape の CapturingGroupNumber とする。
  2. 表明: n ≤ regexpRecord.[[CapturingGroupsCount]]。
  3. BackreferenceMatcher(regexpRecord, « n », direction) を返す。
注 3

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

AtomEscape :: CharacterEscape
  1. charValue を CharacterEscape の CharacterValue とする。
  2. char を文字値が charValue である文字とする。
  3. charSet を文字 char を含む1要素の CharSet とする。
  4. CharacterSetMatcher(regexpRecord, charSet, false, direction) を返す。
AtomEscape :: CharacterClassEscape
  1. cs を、引数 regexpRecord を指定した CharacterClassEscape の CompileToCharSet とする。
  2. regexpRecord.[[UnicodeSets]] が false であるか、cs のすべての CharSetElement が単一の文字からなる場合(cs が空の場合を含む)、CharacterSetMatcher(regexpRecord, cs, false, direction) を返す。
  3. listOfMatchers を Matchers の空の List とする。
  4. csSequences を新しい空の List とする。
  5. cs の各 CharSetElement s について、次を行う。
    1. s の長さ > 1 である場合、s を csSequences に追加する。
  6. csSequences を、各 CharSetElement の長さに従って降順に並べ替える。
  7. csSequences の各 CharSetElement s について、次を行う。
    1. 表明: s は2個以上のコードポイントの列である。
    2. remaining を s のコードポイントからなる List とする。
    3. cs2 を remaining の最後の要素を含む1要素の CharSet とする。
    4. m2 を CharacterSetMatcher(regexpRecord, cs2, false, direction) とする。
    5. remaining の最後の要素を削除する。
    6. remaining の各コードポイント c1 について、List の逆順で次を行う。
      1. cs1 を c1 を含む1要素の CharSet とする。
      2. m1 を CharacterSetMatcher(regexpRecord, cs1, false, direction) とする。
      3. m2 を MatchSequence(m1, m2, direction) に設定する。
    7. m2 を listOfMatchers に追加する。
  8. singles を、単一の文字からなる cs のすべての CharSetElement を含む CharSet とする。
  9. CharacterSetMatcher(regexpRecord, singles, false, direction) を listOfMatchers に追加する。
  10. cs が空の文字列を含む場合、EmptyMatcher() を listOfMatchers に追加する。
  11. m2 を listOfMatchers 内の最後の Matcher とする。
  12. listOfMatchers の各 Matcher m1 について、最後から2番目の要素から逆方向に反復して次を行う。
    1. m2 を MatchTwoAlternatives(m1, m2) に設定する。
  13. m2 を返す。
AtomEscape :: k GroupName
  1. matchingGroupSpecifiers を GroupSpecifiersThatMatch(GroupName) とする。
  2. parenIndices を新しい空の List とする。
  3. matchingGroupSpecifiers の各 GroupSpecifier groupSpecifier について、次を行う。
    1. parenIndex を CountLeftCapturingParensBefore(groupSpecifier) とする。
    2. parenIndex を parenIndices に追加する。
  4. BackreferenceMatcher(regexpRecord, parenIndices, direction) を返す。

22.2.2.7.1 CharacterSetMatcher ( regexpRecord, charSet, invert, direction )

抽象操作 CharacterSetMatcher。引数 regexpRecord (RegExpレコード)、charSet (CharSet)、invert (Boolean) および direction ((forward または backward))。戻り値:Matcher。 呼び出されると、次の手順を実行する。

  1. regexpRecord.[[UnicodeSets]] が true である場合、
    1. 表明: invert は false である。
    2. 表明: charSet のすべての CharSetElement は単一の文字からなる。
  2. regexpRecord、charSet、invert、および direction を捕捉し、パラメーター (x, c) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: x は MatchState である。
    2. 表明: c は MatcherContinuation である。
    3. input を x.[[Input]] とする。
    4. endIndex を x.[[EndIndex]] とする。
    5. direction が forward である場合、f を endIndex + 1 とする。
    6. そうでない場合、f を endIndex - 1 とする。
    7. inputLength を input の要素数とする。
    8. f < 0 または f > inputLength である場合、failure を返す。
    9. index を min(endIndex, f) とする。
    10. char を文字 input[index] とする。
    11. cc を Canonicalize(regexpRecord, char) とする。
    12. Canonicalize(regexpRecord, a) が cc であるような、正確に1文字 a を含む CharSetElement が charSet 内に存在する場合、found を true とする。そうでない場合、found を false とする。
    13. invert が false かつ found が false である場合、failure を返す。
    14. invert が true かつ found が true である場合、failure を返す。
    15. capability を x.[[Captures]] とする。
    16. y を MatchState { [[Input]]: input, [[EndIndex]]: f, [[Captures]]: capability } とする。
    17. c(y) を返す。

22.2.2.7.2 BackreferenceMatcher ( regexpRecord, ns, direction )

抽象操作 BackreferenceMatcher。引数 regexpRecord (RegExpレコード)、ns (リスト (要素:正の整数)) および direction ((forward または backward))。戻り値:Matcher。 呼び出されると、次の手順を実行する。

  1. regexpRecord、ns、および direction を捕捉し、パラメーター (x, c) を持ち、呼び出されたときに次の手順を実行する新しい Matcher を返す。
    1. 表明: x は MatchState である。
    2. 表明: c は MatcherContinuation である。
    3. input を x.[[Input]] とする。
    4. capability を x.[[Captures]] とする。
    5. r を undefined とする。
    6. ns の各整数 n について、次を行う。
      1. capability[n] が undefined でない場合、
        1. 表明: r は undefined である。
        2. r を capability[n] に設定する。
    7. r が undefined である場合、c(x) を返す。
    8. endIndex を x.[[EndIndex]] とする。
    9. rs を r.[[StartIndex]] とする。
    10. re を r.[[EndIndex]] とする。
    11. length を re - rs とする。
    12. direction が forward である場合、f を endIndex + length とする。
    13. そうでない場合、f を endIndex - length とする。
    14. inputLength を input の要素数とする。
    15. f < 0 または f > inputLength である場合、failure を返す。
    16. g を min(endIndex, f) とする。
    17. 0(含む)から length(含まない)までの区間内に、Canonicalize(regexpRecord, input[rs + i]) が Canonicalize(regexpRecord, input[g + i]) でない整数 i が存在する場合、failure を返す。
    18. y を MatchState { [[Input]]: input, [[EndIndex]]: f, [[Captures]]: capability } とする。
    19. c(y) を返す。

22.2.2.7.3 Canonicalize ( regexpRecord, char )

抽象操作 Canonicalize。引数 regexpRecord (RegExpレコード) および char (文字)。戻り値:文字。 呼び出されると、次の手順を実行する。

  1. HasEitherUnicodeFlag(regexpRecord) が true であり、regexpRecord.[[IgnoreCase]] が true である場合、
    1. Unicode Character Database の CaseFolding.txt ファイルが char に対する simple または common case folding マッピングを提供する場合、そのマッピングを char に適用した結果を返す。
    2. char を返す。
  2. regexpRecord.[[IgnoreCase]] が false である場合、char を返す。
  3. 表明: char は UTF-16 コード単位である。
  4. codePoint を、数値が char の数値であるコードポイントとする。
  5. mappedCodePoints を Unicode Default Case Conversion アルゴリズムに従った toUppercase(« codePoint ») とする。
  6. CodePointsToString(mappedCodePoints) の長さ ≠ 1 である場合、char を返す。
  7. 表明: mappedCodePoints の要素数は 1 である。
  8. mappedCodePoint を mappedCodePoints の唯一のコードポイント要素とする。
  9. char の数値 ≥ 128 かつ mappedCodePoint の数値 < 128 である場合、char を返す。
  10. 数値が mappedCodePoint の数値であるコード単位を返す。
注

HasEitherUnicodeFlag(regexpRecord) が true である大文字小文字を区別しないマッチでは、すべての文字は比較の直前に Unicode 標準が提供する simple mapping を使用して暗黙に case-fold されます。simple mapping は常に単一のコードポイントへマッピングするため、たとえば ß (U+00DF LATIN SMALL LETTER SHARP S) を ss または SS にはマッピングしません。ただし、基本ラテンブロック外のコードポイントをその内部のコードポイントへマッピングする場合があります。たとえば、ſ (U+017F LATIN SMALL LETTER LONG S) は s (U+0073 LATIN SMALL LETTER S) に case-fold され、K (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 には一致しません。また、基本ラテンブロック外のコードポイントがその内部のコードポイントへマッピングされることはないため、"\u017F ſ" や "\u212A K" のような String は /[a-z]/i によって一致しません。

22.2.2.7.4 UpdateModifiers ( regexpRecord, add, remove )

抽象操作 UpdateModifiers。引数 regexpRecord (RegExpレコード)、add (String) および remove (String)。戻り値:RegExpレコード。 呼び出されると、次の手順を実行する。

  1. 表明: add と remove に共通の要素はない。
  2. ignoreCase を regexpRecord.[[IgnoreCase]] とする。
  3. multiline を regexpRecord.[[Multiline]] とする。
  4. dotAll を regexpRecord.[[DotAll]] とする。
  5. unicode を regexpRecord.[[Unicode]] とする。
  6. unicodeSets を regexpRecord.[[UnicodeSets]] とする。
  7. capturingGroupsCount を regexpRecord.[[CapturingGroupsCount]] とする。
  8. remove が "i" を含む場合、ignoreCase を false に設定する。
  9. そうでなく、add が "i" を含む場合、ignoreCase を true に設定する。
  10. remove が "m" を含む場合、multiline を false に設定する。
  11. そうでなく、add が "m" を含む場合、multiline を true に設定する。
  12. remove が "s" を含む場合、dotAll を false に設定する。
  13. そうでなく、add が "s" を含む場合、dotAll を true に設定する。
  14. RegExp Record { [[IgnoreCase]]: ignoreCase, [[Multiline]]: multiline, [[DotAll]]: dotAll, [[Unicode]]: unicode, [[UnicodeSets]]: unicodeSets, [[CapturingGroupsCount]]: capturingGroupsCount } を返す。

22.2.2.8 Runtime Semantics: CompileCharacterClass

構文指向操作 CompileCharacterClass。引数 regexpRecord (RegExpレコード)。戻り値:レコード (フィールド:[[CharSet]] (CharSet), [[Invert]] (Boolean))。 次の生成規則ごとに定義される。

CharacterClass :: [ ClassContents ]
  1. charSet を、引数 regexpRecord を指定した ClassContents の CompileToCharSet とする。
  2. Record { [[CharSet]]: charSet, [[Invert]]: false } を返す。
CharacterClass :: [^ ClassContents ]
  1. charSet を、引数 regexpRecord を指定した ClassContents の CompileToCharSet とする。
  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

構文指向操作 CompileToCharSet。引数 regexpRecord (RegExpレコード)。戻り値:CharSet。

注 1

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

次の生成規則ごとに定義される。

ClassContents :: [empty]
  1. 空の CharSet を返す。
NonemptyClassRanges :: ClassAtom NonemptyClassRangesNoDash
  1. charSet を、引数 regexpRecord を指定した ClassAtom の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した NonemptyClassRangesNoDash の CompileToCharSet とする。
  3. CharSet charSet と otherSet の和集合を返す。
NonemptyClassRanges :: ClassAtom - ClassAtom ClassContents
  1. charSet を、引数 regexpRecord を指定した最初の ClassAtom の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した2番目の ClassAtom の CompileToCharSet とする。
  3. remainingSet を、引数 regexpRecord を指定した ClassContents の CompileToCharSet とする。
  4. rangeSet を CharacterRange(charSet, otherSet) とする。
  5. rangeSet と remainingSet の和集合を返す。
NonemptyClassRangesNoDash :: ClassAtomNoDash NonemptyClassRangesNoDash
  1. charSet を、引数 regexpRecord を指定した ClassAtomNoDash の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した NonemptyClassRangesNoDash の CompileToCharSet とする。
  3. CharSet charSet と otherSet の和集合を返す。
NonemptyClassRangesNoDash :: ClassAtomNoDash - ClassAtom ClassContents
  1. charSet を、引数 regexpRecord を指定した ClassAtomNoDash の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した ClassAtom の CompileToCharSet とする。
  3. remainingSet を、引数 regexpRecord を指定した ClassContents の CompileToCharSet とする。
  4. rangeSet を CharacterRange(charSet, otherSet) とする。
  5. rangeSet と remainingSet の和集合を返す。
注 2

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

注 3

pattern が大文字小文字を無視する場合でも、範囲の両端の大文字小文字は、どの文字がその範囲に属するかを決定するうえで重要です。したがって、たとえば pattern /[E-F]/i は E、F、e、f の文字だけに一致しますが、pattern /[E-f]/i は Unicode 基本ラテンブロック内のすべての大文字および小文字と、記号 [, \, ], ^, _, および ` に一致します。

注 4

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

ClassAtom :: -
  1. 単一文字 - U+002D (HYPHEN-MINUS) を含む CharSet を返す。
ClassAtomNoDash :: SourceCharacter but not one of \ or ] or -
  1. SourceCharacter に一致した文字を含む CharSet を返す。
ClassEscape :: b - CharacterEscape
  1. charValue をこの ClassEscape の CharacterValue とする。
  2. char を文字値が charValue である文字とする。
  3. 単一文字 char を含む CharSet を返す。
注 5

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

CharacterClassEscape :: d
  1. 文字 0、1、2、3、4、5、6、7、8、および 9 を含む10要素の CharSet を返す。
CharacterClassEscape :: D
  1. charSet を CharacterClassEscape :: d によって返される CharSet とする。
  2. CharacterComplement(regexpRecord, charSet) を返す。
CharacterClassEscape :: s
  1. WhiteSpace または LineTerminator 生成規則の右辺にあるコードポイントに対応するすべての文字を含む 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 を指定した UnicodePropertyValueExpression の CompileToCharSet を返す。
CharacterClassEscape :: P{ UnicodePropertyValueExpression }
  1. charSet を、引数 regexpRecord を指定した UnicodePropertyValueExpression の CompileToCharSet とする。
  2. 表明: charSet は単一のコードポイントだけを含む。
  3. CharacterComplement(regexpRecord, charSet) を返す。
UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue
  1. ps を UnicodePropertyName に一致したソーステキストとする。
  2. p を UnicodeMatchProperty(regexpRecord, ps) とする。
  3. 表明: p は 表 65 の「Property name and aliases」列に列挙されたUnicode プロパティ名またはプロパティ別名である。
  4. vs を UnicodePropertyValue に一致したソーステキストとする。
  5. v を UnicodeMatchPropertyValue(p, vs) とする。
  6. charSet を、character database 定義が値 v のプロパティ p を含むすべての Unicode コードポイントを含む CharSet とする。
  7. MaybeSimpleCaseFolding(regexpRecord, charSet) を返す。
UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue
  1. s を LoneUnicodePropertyNameOrValue に一致したソーステキストとする。
  2. UnicodeMatchPropertyValue(General_Category, s) が、PropertyValueAliases.txt に列挙された General_Category (gc) プロパティの Unicode プロパティ値またはプロパティ値別名である場合、
    1. character database 定義が値 s のプロパティ「General_Category」を含むすべての Unicode コードポイントを含む CharSet を返す。
  3. p を UnicodeMatchProperty(regexpRecord, s) とする。
  4. 表明: p は 表 66 の「Property name and aliases」列に列挙されたバイナリ Unicode プロパティまたはバイナリプロパティ別名、あるいは 表 67 の「Property name」列に列挙された文字列のバイナリ Unicode プロパティである。
  5. charSet を、character database 定義が値「True」のプロパティ p を含むすべての CharSetElement を含む CharSet とする。
  6. MaybeSimpleCaseFolding(regexpRecord, charSet) を返す。
ClassUnion :: ClassSetRange ClassUnionopt
  1. charSet を、引数 regexpRecord を指定した ClassSetRange の CompileToCharSet とする。
  2. ClassUnion が存在する場合、
    1. otherSet を、引数 regexpRecord を指定した ClassUnion の CompileToCharSet とする。
    2. CharSet charSet と otherSet の和集合を返す。
  3. charSet を返す。
ClassUnion :: ClassSetOperand ClassUnionopt
  1. charSet を、引数 regexpRecord を指定した ClassSetOperand の CompileToCharSet とする。
  2. ClassUnion が存在する場合、
    1. otherSet を、引数 regexpRecord を指定した ClassUnion の CompileToCharSet とする。
    2. CharSet charSet と otherSet の和集合を返す。
  3. charSet を返す。
ClassIntersection :: ClassSetOperand && ClassSetOperand
  1. charSet を、引数 regexpRecord を指定した最初の ClassSetOperand の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した2番目の ClassSetOperand の CompileToCharSet とする。
  3. CharSet charSet と otherSet の共通部分を返す。
ClassIntersection :: ClassIntersection && ClassSetOperand
  1. charSet を、引数 regexpRecord を指定した ClassIntersection の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した ClassSetOperand の CompileToCharSet とする。
  3. CharSet charSet と otherSet の共通部分を返す。
ClassSubtraction :: ClassSetOperand -- ClassSetOperand
  1. charSet を、引数 regexpRecord を指定した最初の ClassSetOperand の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した2番目の ClassSetOperand の CompileToCharSet とする。
  3. otherSet の CharSetElement でもあるものを除いた、charSet の CharSetElement を含む CharSet を返す。
ClassSubtraction :: ClassSubtraction -- ClassSetOperand
  1. charSet を、引数 regexpRecord を指定した ClassSubtraction の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した ClassSetOperand の CompileToCharSet とする。
  3. otherSet の CharSetElement でもあるものを除いた、charSet の CharSetElement を含む CharSet を返す。
ClassSetRange :: ClassSetCharacter - ClassSetCharacter
  1. charSet を、引数 regexpRecord を指定した最初の ClassSetCharacter の CompileToCharSet とする。
  2. otherSet を、引数 regexpRecord を指定した2番目の ClassSetCharacter の CompileToCharSet とする。
  3. MaybeSimpleCaseFolding(regexpRecord, CharacterRange(charSet, otherSet)) を返す。
注 6

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

ClassSetOperand :: ClassSetCharacter
  1. charSet を、引数 regexpRecord を指定した ClassSetCharacter の CompileToCharSet とする。
  2. MaybeSimpleCaseFolding(regexpRecord, charSet) を返す。
ClassSetOperand :: ClassStringDisjunction
  1. charSet を、引数 regexpRecord を指定した ClassStringDisjunction の CompileToCharSet とする。
  2. MaybeSimpleCaseFolding(regexpRecord, charSet) を返す。
ClassSetOperand :: NestedClass
  1. 引数 regexpRecord を指定した NestedClass の CompileToCharSet を返す。
NestedClass :: [ ClassContents ]
  1. 引数 regexpRecord を指定した ClassContents の CompileToCharSet を返す。
NestedClass :: [^ ClassContents ]
  1. charSet を、引数 regexpRecord を指定した ClassContents の CompileToCharSet とする。
  2. CharacterComplement(regexpRecord, charSet) を返す。
NestedClass :: \ CharacterClassEscape
  1. 引数 regexpRecord を指定した CharacterClassEscape の CompileToCharSet を返す。
ClassStringDisjunction :: \q{ ClassStringDisjunctionContents }
  1. 引数 regexpRecord を指定した ClassStringDisjunctionContents の CompileToCharSet を返す。
ClassStringDisjunctionContents :: ClassString
  1. s を、引数 regexpRecord を指定した ClassString の CompileClassSetString とする。
  2. 唯一の文字列 s を含む CharSet を返す。
ClassStringDisjunctionContents :: ClassString | ClassStringDisjunctionContents
  1. s を、引数 regexpRecord を指定した ClassString の CompileClassSetString とする。
  2. charSet を唯一の文字列 s を含む CharSet とする。
  3. otherSet を、引数 regexpRecord を指定した ClassStringDisjunctionContents の CompileToCharSet とする。
  4. CharSet charSet と otherSet の和集合を返す。
ClassSetCharacter :: SourceCharacter but not ClassSetSyntaxCharacter \ CharacterEscape \ ClassSetReservedPunctuator
  1. charValue をこの ClassSetCharacter の CharacterValue とする。
  2. char を文字値が charValue である文字とする。
  3. 単一文字 char を含む CharSet を返す。
ClassSetCharacter :: \b
  1. 単一文字 U+0008 (BACKSPACE) を含む CharSet を返す。

22.2.2.9.1 CharacterRange ( charSet, otherSet )

抽象操作 CharacterRange。引数 charSet (CharSet) および otherSet (CharSet)。戻り値:CharSet。 呼び出されると、次の手順を実行する。

  1. 表明: charSet と otherSet はそれぞれ正確に1文字を含む。
  2. a を CharSet charSet 内の唯一の文字とする。
  3. b を CharSet otherSet 内の唯一の文字とする。
  4. i を文字 a の文字値とする。
  5. j を文字 b の文字値とする。
  6. 表明: i ≤ j。
  7. i から j までの閉区間内の文字値を持つすべての文字を含む CharSet を返す。

22.2.2.9.2 HasEitherUnicodeFlag ( regexpRecord )

抽象操作 HasEitherUnicodeFlag。引数 regexpRecord (RegExpレコード)。戻り値:Boolean。 呼び出されると、次の手順を実行する。

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

22.2.2.9.3 WordCharacters ( regexpRecord )

抽象操作 WordCharacters。引数 regexpRecord (RegExpレコード)。戻り値:CharSet。 \b、\B、\w、および \W の目的において「word characters」とみなされる文字を含む CharSet を返します。 呼び出されると、次の手順を実行する。

  1. basicWordChars を ASCII word characters 内のすべての文字を含む CharSet とする。
  2. extraWordChars を、basicWordChars 内にはないが Canonicalize(regexpRecord, c) が basicWordChars 内にある、すべての文字 c を含む CharSet とする。
  3. 表明: HasEitherUnicodeFlag(regexpRecord) が true であり、regexpRecord.[[IgnoreCase]] が true でない限り、extraWordChars は空である。
  4. basicWordChars と extraWordChars の和集合を返す。

22.2.2.9.4 AllCharacters ( regexpRecord )

抽象操作 AllCharacters。引数 regexpRecord (RegExpレコード)。戻り値:CharSet。 正規表現フラグに従う「すべての文字」の集合を返します。 呼び出されると、次の手順を実行する。

  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 )

抽象操作 MaybeSimpleCaseFolding。引数 regexpRecord (RegExpレコード) および charSet (CharSet)。戻り値:CharSet。 regexpRecord.[[UnicodeSets]] が false であるか、regexpRecord.[[IgnoreCase]] が false である場合、charSet を返します。それ以外の場合、Unicode Character Database の CaseFolding.txt ファイル内の Simple Case Folding(scf(codePoint))定義(それぞれが単一のコードポイントを別の単一のコードポイントへマッピングする)を使用して、charSet の各 CharSetElement を文字ごとに正準形式へマッピングし、結果の CharSet を返します。 呼び出されると、次の手順を実行する。

  1. regexpRecord.[[UnicodeSets]] が false であるか、regexpRecord.[[IgnoreCase]] が false である場合、charSet を返す。
  2. otherSet を新しい空の CharSet とする。
  3. charSet の各 CharSetElement s について、次を行う。
    1. t を空の文字列とする。
    2. s の各単一コードポイント codePoint について、次を行う。
      1. scf(codePoint) を t に追加する。
    3. t を otherSet に追加する。
  4. otherSet を返す。

22.2.2.9.6 CharacterComplement ( regexpRecord, complement )

抽象操作 CharacterComplement。引数 regexpRecord (RegExpレコード) および complement (CharSet)。戻り値:CharSet。 呼び出されると、次の手順を実行する。

  1. charSet を AllCharacters(regexpRecord) とする。
  2. complement の CharSetElement でもあるものを除いた、charSet の CharSetElement を含む CharSet を返す。

22.2.2.9.7 UnicodeMatchProperty ( regexpRecord, p )

抽象操作 UnicodeMatchProperty。引数 regexpRecord (RegExpレコード) および p (ECMAScript ソーステキスト)。戻り値:a Unicode property name。 呼び出されると、次の手順を実行する。

  1. regexpRecord.[[UnicodeSets]] が true であり、p が 表 67 の「Property name」列に列挙されたUnicode プロパティ名である場合、
    1. Unicode コードポイントの List p を返す。
  2. 表明: p は 表 65 または 表 66 の「Property name and aliases」列に列挙されたUnicode プロパティ名またはプロパティ別名である。
  3. c を、対応する行の「Canonical property name」列に示される p の正準プロパティ名とする。
  4. Unicode コードポイントの List c を返す。

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

注 1

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

注 2

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

注 3

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

表 65: 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
表 66: 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
表 67: 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 )

抽象操作 UnicodeMatchPropertyValue。引数 p (ECMAScript ソーステキスト) および v (ECMAScript ソーステキスト)。戻り値:a Unicode property value。 呼び出されると、次の手順を実行する。

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

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

注 1

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

注 2

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

22.2.2.10 Runtime Semantics: CompileClassSetString

構文指向操作 CompileClassSetString。引数 regexpRecord (RegExpレコード)。戻り値:a sequence of characters。 次の生成規則ごとに定義される。

ClassString :: [empty]
  1. 空の文字列を返す。
ClassString :: NonEmptyClassString
  1. 引数 regexpRecord を指定した NonEmptyClassString の CompileClassSetString を返す。
NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt
  1. cs を、引数 regexpRecord を指定した ClassSetCharacter の CompileToCharSet とする。
  2. s1 を cs の唯一の CharSetElement である文字列とする。
  3. NonEmptyClassString が存在する場合、
    1. s2 を、引数 regexpRecord を指定した NonEmptyClassString の CompileClassSetString とする。
    2. s1 と s2 の連結を返す。
  4. s1 を返す。

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

22.2.3.1 RegExpCreate ( pattern, flags )

抽象操作 RegExpCreate。引数 pattern (ECMAScript 言語値) および flags ((String または undefined))。戻り値:(正常完了 (値:Object) または throw 完了)。 呼び出されると、次の手順を実行する。

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

22.2.3.2 RegExpAlloc ( newTarget )

抽象操作 RegExpAlloc。引数 newTarget (コンストラクター)。戻り値:(正常完了 (値:Object) または throw 完了)。 呼び出されると、次の手順を実行する。

  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 )

抽象操作 RegExpInitialize。引数 obj (Object)、pattern (ECMAScript 言語値) および flags (ECMAScript 言語値)。戻り値:(正常完了 (値:Object) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. pattern が undefined である場合、pattern を空の String に設定する。
  2. そうでない場合、pattern を ? ToString(pattern) に設定する。
  3. flags が undefined である場合、flags を空の String に設定する。
  4. そうでない場合、flags を ? ToString(flags) に設定する。
  5. flags が "d"、"g"、"i"、"m"、"s"、"u"、"v"、または "y" 以外のコード単位を含む場合、SyntaxError 例外をスローする。
  6. flags が同じコード単位を複数回含む場合、SyntaxError 例外をスローする。
  7. flags が "i" を含む場合、i を true とする。そうでない場合、i を false とする。
  8. flags が "m" を含む場合、m を true とする。そうでない場合、m を false とする。
  9. flags が "s" を含む場合、s を true とする。そうでない場合、s を false とする。
  10. flags が "u" を含む場合、u を true とする。そうでない場合、u を false とする。
  11. flags が "v" を含む場合、v を true とする。そうでない場合、v を false とする。
  12. u が true または v が true である場合、
    1. patternText を StringToCodePoints(pattern) とする。
  13. そうでない場合、
    1. patternText を、pattern の各16ビット要素を Unicode BMP コードポイントとして解釈した結果とする。要素には UTF-16 デコードを適用しない。
  14. parseResult を ParsePattern(patternText, u, v) とする。
  15. parseResult が空でない SyntaxError オブジェクトの List である場合、SyntaxError 例外をスローする。
  16. 表明: parseResult は Pattern Parse Node である。
  17. obj.[[OriginalSource]] を pattern に設定する。
  18. obj.[[OriginalFlags]] を flags に設定する。
  19. capturingGroupsCount を CountLeftCapturingParensWithin(parseResult) とする。
  20. regexpRecord を RegExp Record { [[IgnoreCase]]: i, [[Multiline]]: m, [[DotAll]]: s, [[Unicode]]: u, [[UnicodeSets]]: v, [[CapturingGroupsCount]]: capturingGroupsCount } とする。
  21. obj.[[RegExpRecord]] を regexpRecord に設定する。
  22. obj.[[RegExpMatcher]] を、引数 regexpRecord を指定した parseResult の CompilePattern に設定する。
  23. ? Set(obj, "lastIndex", +0𝔽, true) を実行する。
  24. obj を返す。

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

抽象操作 ParsePattern。引数 patternText (a sequence of Unicode code points)、u (Boolean) および v (Boolean)。戻り値:(構文解析ノード または a non-empty List of SyntaxError objects)。

注

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

呼び出されると、次の手順を実行する。

  1. v が true かつ u が true である場合、
    1. parseResult を1つ以上の SyntaxError オブジェクトを含む List とする。
  2. そうでなく、v が true である場合、
    1. parseResult を ParseText(patternText, Pattern[+UnicodeMode, +UnicodeSetsMode, +NamedCaptureGroups]) とする。
  3. そうでなく、u が true である場合、
    1. parseResult を ParseText(patternText, Pattern[+UnicodeMode, ~UnicodeSetsMode, +NamedCaptureGroups]) とする。
  4. そうでない場合、
    1. parseResult を ParseText(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. patternIsRegExp が true であり、flags が undefined である場合、
      1. patternCtor を ? Get(patternOrRegexp, "constructor") とする。
      2. SameValue(newTarget, patternCtor) が true である場合、patternOrRegexp を返す。
  3. そうでない場合、
    1. newTarget を NewTarget とする。
  4. patternOrRegexp が Object であり、patternOrRegexp が [[RegExpMatcher]] 内部スロットを持つ場合、
    1. patternSource を patternOrRegexp.[[OriginalSource]] とする。
    2. flags が undefined である場合、flags を patternOrRegexp.[[OriginalFlags]] に設定する。
  5. そうでなく、patternIsRegExp が true である場合、
    1. patternSource を ? Get(patternOrRegexp, "source") とする。
    2. flags が undefined である場合、
      1. flags を ? Get(patternOrRegexp, "flags") に設定する。
  6. そうでない場合、
    1. patternSource を patternOrRegexp とする。
  7. obj を ? RegExpAlloc(newTarget) とする。
  8. ? RegExpInitialize(obj, patternSource, flags) を返す。
注

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

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

RegExp コンストラクターは:

  • 値が %Function.prototype% である [[Prototype]] 内部スロットを持ちます。
  • 次のプロパティを持ちます。

22.2.5.1 RegExp.escape ( string )

この関数は、正規表現 Pattern 内で特殊となる可能性がある文字を等価なエスケープシーケンスに置き換えた string のコピーを返します。

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

  1. string が String でない場合、TypeError 例外をスローする。
  2. escaped を空の String とする。
  3. codePointList を StringToCodePoints(string) とする。
  4. codePointList の各コードポイント codePoint について、次を行う。
    1. escaped が空の String であり、codePoint が DecimalDigit または AsciiLetter のいずれかに一致する場合、
      1. 注記: 先頭の数字をエスケープすると、出力が \0 文字エスケープまたは \1 のような DecimalEscape の後で使用される可能性のある pattern text に対応し、それでも前のエスケープシーケンスの拡張として解釈されるのではなく string に一致することが保証される。先頭の ASCII 文字をエスケープすることは、\c の後の文脈について同じ役割を果たす。
      2. numericValue を codePoint の数値とする。
      3. hex を Number::toString(𝔽(numericValue), 16) とする。
      4. 表明: hex の長さは 2 である。
      5. escaped をコード単位 0x005C (REVERSE SOLIDUS)、"x"、および hex の文字列連結に設定する。
    2. そうでない場合、
      1. escaped を escaped と EncodeForRegExpEscape(codePoint) の文字列連結に設定する。
  5. escaped を返す。
注

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

22.2.5.1.1 EncodeForRegExpEscape ( codePoint )

抽象操作 EncodeForRegExpEscape。引数 codePoint (コードポイント)。戻り値:String。 codePoint に一致する Pattern を表す String を返します。codePoint が空白または ASCII punctuator である場合、返される値はエスケープシーケンスです。それ以外の場合、返される値は codePoint 自身の String 表現です。 呼び出されると、次の手順を実行する。

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

22.2.5.2 RegExp.prototype

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

このプロパティは属性 { [[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]" です。

注

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

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

RegExp prototype オブジェクトは:

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

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

22.2.6.1 RegExp.prototype.constructor

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

22.2.6.2 RegExp.prototype.exec ( string )

このメソッドは、string 内で正規表現 pattern の出現を検索し、マッチ結果を含む Array を返します。string が一致しなかった場合は null を返します。

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

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

22.2.6.3 get RegExp.prototype.dotAll

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

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

22.2.6.4 get RegExp.prototype.flags

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

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

22.2.6.4.1 RegExpHasFlag ( regexp, codeUnit )

抽象操作 RegExpHasFlag。引数 regexp (ECMAScript 言語値) および codeUnit (コード単位)。戻り値:(正常完了 (値:(Boolean または undefined)) または throw 完了)。 呼び出されると、次の手順を実行する。

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

22.2.6.5 get RegExp.prototype.global

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

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

22.2.6.6 get RegExp.prototype.hasIndices

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

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

22.2.6.7 get RegExp.prototype.ignoreCase

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

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

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

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

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

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

注

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

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

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

  1. regexp を this 値とする。
  2. regexp が Object でない場合、TypeError 例外をスローする。
  3. string を ? ToString(string) に設定する。
  4. speciesCtor を ? SpeciesConstructor(regexp, %RegExp%) とする。
  5. flags を ? ToString(? Get(regexp, "flags")) とする。
  6. matcher を ? Construct(speciesCtor, « regexp, flags ») とする。
  7. lastIndex を ? ToLength(? Get(regexp, "lastIndex")) とする。
  8. ? Set(matcher, "lastIndex", lastIndex, true) を実行する。
  9. flags が "g" を含む場合、global を true とする。
  10. そうでない場合、global を false とする。
  11. flags が "u" を含むか、flags が "v" を含む場合、fullUnicode を true とする。
  12. そうでない場合、fullUnicode を false とする。
  13. CreateRegExpStringIterator(matcher, string, global, fullUnicode) を返す。

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

22.2.6.10 get RegExp.prototype.multiline

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

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

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

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

  1. regexp を this 値とする。
  2. regexp が Object でない場合、TypeError 例外をスローする。
  3. string を ? ToString(string) に設定する。
  4. stringLength を string の長さとする。
  5. functionalReplace を IsCallable(replaceValue) とする。
  6. functionalReplace が false である場合、
    1. replaceValue を ? ToString(replaceValue) に設定する。
  7. flags を ? ToString(? Get(regexp, "flags")) とする。
  8. flags が "g" を含む場合、global を true とする。そうでない場合、global を false とする。
  9. global が true である場合、
    1. ? Set(regexp, "lastIndex", +0𝔽, true) を実行する。
  10. results を新しい空の List とする。
  11. done を false とする。
  12. done が false である間、次を繰り返す。
    1. result を ? RegExpExec(regexp, string) とする。
    2. result が null である場合、
      1. done を true に設定する。
    3. そうでない場合、
      1. result を results に追加する。
      2. global が false である場合、
        1. done を true に設定する。
      3. そうでない場合、
        1. matchString を ? ToString(? Get(result, "0")) とする。
        2. matchString が空の String である場合、
          1. thisIndex を ℝ(? ToLength(? Get(regexp, "lastIndex"))) とする。
          2. flags が "u" を含むか、flags が "v" を含む場合、fullUnicode を true とする。そうでない場合、fullUnicode を false とする。
          3. nextIndex を AdvanceStringIndex(string, thisIndex, fullUnicode) とする。
          4. ? Set(regexp, "lastIndex", 𝔽(nextIndex), true) を実行する。
  13. accumulatedResult を空の String とする。
  14. nextSourcePosition を 0 とする。
  15. results の各要素 result について、次を行う。
    1. resultLength を ? LengthOfArrayLike(result) とする。
    2. capturesCount を max(resultLength - 1, 0) とする。
    3. matched を ? ToString(? Get(result, "0")) とする。
    4. matchLength を matched の長さとする。
    5. position を ? ToIntegerOrInfinity(? Get(result, "index")) とする。
    6. position を position を 0 と stringLength の間にクランプした結果に設定する。
    7. captures を新しい空の List とする。
    8. captureNumber を 1 とする。
    9. captureNumber ≤ capturesCount の間、次を繰り返す。
      1. capture を ? Get(result, ! ToString(𝔽(captureNumber))) とする。
      2. capture が undefined でない場合、
        1. capture を ? ToString(capture) に設定する。
      3. capture を captures に追加する。
      4. 注記: captureNumber = 1 の場合、前の手順は最初の要素を captures(インデックス0)に置く。より一般には、captureNumberth capture(captureNumberth のキャプチャ括弧集合によってキャプチャされた文字)は captures[captureNumber - 1] にある。
      5. captureNumber を captureNumber + 1 に設定する。
    10. namedCaptures を ? Get(result, "groups") とする。
    11. functionalReplace が true である場合、
      1. replacerArgs を « matched »、captures、および « 𝔽(position), string » のリスト連結とする。
      2. namedCaptures が undefined でない場合、
        1. namedCaptures を replacerArgs に追加する。
      3. replacementValue を ? Call(replaceValue, undefined, replacerArgs) とする。
      4. replacementString を ? ToString(replacementValue) とする。
    12. そうでない場合、
      1. namedCaptures が undefined でない場合、
        1. namedCaptures を ? ToObject(namedCaptures) に設定する。
      2. replacementString を ? GetSubstitution(matched, string, position, captures, namedCaptures, replaceValue) とする。
    13. position ≥ nextSourcePosition である場合、
      1. 注記: 通常、position が後方へ移動するべきではない。後方へ移動する場合、それは不適切に動作する RegExp サブクラス、またはアクセスによって引き起こされる副作用を使用して regexp の global flag やその他の特性を変更したことを示す。そのような場合、対応する置換は無視される。
      2. accumulatedResult を accumulatedResult、string の nextSourcePosition から position までの部分文字列、および replacementString の文字列連結に設定する。
      3. nextSourcePosition を position + matchLength に設定する。
  16. nextSourcePosition ≥ stringLength である場合、accumulatedResult を返す。
  17. accumulatedResult と string の nextSourcePosition から始まる部分文字列の文字列連結を返す。

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

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

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

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

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

注

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

22.2.6.13 get RegExp.prototype.source

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

  1. regexp を this 値とする。
  2. regexp が Object でない場合、TypeError 例外をスローする。
  3. regexp が [[OriginalSource]] 内部スロットを持たない場合、
    1. SameValue(regexp, %RegExp.prototype%) が true である場合、"(?:)" を返す。
    2. TypeError 例外をスローする。
  4. 表明: regexp は [[OriginalFlags]] 内部スロットを持つ。
  5. source を regexp.[[OriginalSource]] とする。
  6. flags を regexp.[[OriginalFlags]] とする。
  7. EscapeRegExpPattern(source, flags) を返す。

22.2.6.13.1 EscapeRegExpPattern ( pattern, flags )

抽象操作 EscapeRegExpPattern。引数 pattern (String) および flags (String)。戻り値:String。 呼び出されると、次の手順を実行する。

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

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

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

注 1

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

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

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

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

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

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

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

limit が undefined でない場合、出力配列は limit 個を超える要素を含まないよう切り詰められます。

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

  1. regexp を this 値とする。
  2. regexp が Object でない場合、TypeError 例外をスローする。
  3. string を ? ToString(string) に設定する。
  4. speciesCtor を ? SpeciesConstructor(regexp, %RegExp%) とする。
  5. flags を ? ToString(? Get(regexp, "flags")) とする。
  6. flags が "u" を含むか、flags が "v" を含む場合、unicodeMatching を true とする。
  7. そうでない場合、unicodeMatching を false とする。
  8. flags が "y" を含む場合、newFlags を flags とする。
  9. そうでない場合、newFlags を flags と "y" の文字列連結とする。
  10. splitter を ? Construct(speciesCtor, « regexp, newFlags ») とする。
  11. array を ! ArrayCreate(0) とする。
  12. lengthA を 0 とする。
  13. limit が undefined である場合、lim を 232 - 1 とする。そうでない場合、lim を ℝ(? ToUint32(limit)) とする。
  14. lim = 0 である場合、array を返す。
  15. string が空の String である場合、
    1. matchResult を ? RegExpExec(splitter, string) とする。
    2. matchResult が null でない場合、array を返す。
    3. ! CreateDataPropertyOrThrow(array, "0", string) を実行する。
    4. array を返す。
  16. size を string の長さとする。
  17. lastMatchEnd を 0 とする。
  18. searchIndex を lastMatchEnd とする。
  19. searchIndex < size の間、次を繰り返す。
    1. ? Set(splitter, "lastIndex", 𝔽(searchIndex), true) を実行する。
    2. matchResult を ? RegExpExec(splitter, string) とする。
    3. matchResult が null である場合、
      1. searchIndex を AdvanceStringIndex(string, searchIndex, unicodeMatching) に設定する。
    4. そうでない場合、
      1. matchEnd を ℝ(? ToLength(? Get(splitter, "lastIndex"))) とする。
      2. matchEnd を min(matchEnd, size) に設定する。
      3. matchEnd = lastMatchEnd である場合、
        1. searchIndex を AdvanceStringIndex(string, searchIndex, unicodeMatching) に設定する。
      4. そうでない場合、
        1. substring を string の lastMatchEnd から searchIndex までの部分文字列とする。
        2. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(lengthA)), substring) を実行する。
        3. lengthA を lengthA + 1 に設定する。
        4. lengthA = lim である場合、array を返す。
        5. lastMatchEnd を matchEnd に設定する。
        6. numberOfCaptures を ? LengthOfArrayLike(matchResult) とする。
        7. numberOfCaptures を max(numberOfCaptures - 1, 0) に設定する。
        8. captureIndex を 1 とする。
        9. captureIndex ≤ numberOfCaptures の間、次を繰り返す。
          1. nextCapture を ? Get(matchResult, ! ToString(𝔽(captureIndex))) とする。
          2. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(lengthA)), nextCapture) を実行する。
          3. captureIndex を captureIndex + 1 に設定する。
          4. lengthA を lengthA + 1 に設定する。
          5. lengthA = lim である場合、array を返す。
        10. searchIndex を lastMatchEnd に設定する。
  20. substring を string の lastMatchEnd から size までの部分文字列とする。
  21. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(lengthA)), substring) を実行する。
  22. array を返す。

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

注 2

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

22.2.6.15 get RegExp.prototype.sticky

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

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

22.2.6.16 RegExp.prototype.test ( string )

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

  1. regexp を this 値とする。
  2. regexp が Object でない場合、TypeError 例外をスローする。
  3. string を ? ToString(string) に設定する。
  4. match を ? RegExpExec(regexp, string) とする。
  5. match が null である場合、false を返す。
  6. true を返す。

22.2.6.17 RegExp.prototype.toString ( )

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

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

22.2.6.18 get RegExp.prototype.unicode

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

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

22.2.6.19 get RegExp.prototype.unicodeSets

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

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

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

22.2.7.1 RegExpExec ( regexp, string )

抽象操作 RegExpExec。引数 regexp (Object) および string (String)。戻り値:(正常完了 (値:(Object または null)) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. exec を ? Get(regexp, "exec") とする。
  2. IsCallable(exec) が true である場合、
    1. result を ? Call(exec, regexp, « string ») とする。
    2. result が Object でなく、result が null でもない場合、TypeError 例外をスローする。
    3. result を返す。
  3. ? RequireInternalSlot(regexp, [[RegExpMatcher]]) を実行する。
  4. ? RegExpBuiltinExec(regexp, string) を返す。
注

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

22.2.7.2 RegExpBuiltinExec ( regexp, string )

抽象操作 RegExpBuiltinExec。引数 regexp (an initialized RegExp instance) および string (String)。戻り値:(正常完了 (値:(Arrayエキゾチックオブジェクト または null)) または throw 完了)。 呼び出されると、次の手順を実行する。

  1. length を string の長さとする。
  2. lastIndex を ℝ(? ToLength(! Get(regexp, "lastIndex"))) とする。
  3. flags を regexp.[[OriginalFlags]] とする。
  4. flags が "g" を含む場合、global を true とする。そうでない場合、global を false とする。
  5. flags が "y" を含む場合、sticky を true とする。そうでない場合、sticky を false とする。
  6. flags が "d" を含む場合、hasIndices を true とする。そうでない場合、hasIndices を false とする。
  7. global が false かつ sticky が false である場合、lastIndex を 0 に設定する。
  8. matcher を regexp.[[RegExpMatcher]] とする。
  9. flags が "u" を含むか、flags が "v" を含む場合、fullUnicode を true とする。そうでない場合、fullUnicode を false とする。
  10. matchSucceeded を false とする。
  11. fullUnicode が true である場合、input を StringToCodePoints(string) とする。そうでない場合、input を string の要素であるコード単位を要素とする List とする。
  12. 注記: input の各要素は文字とみなされる。
  13. matchSucceeded が false である間、次を繰り返す。
    1. lastIndex > length である場合、
      1. global が true または sticky が true である場合、
        1. ? Set(regexp, "lastIndex", +0𝔽, true) を実行する。
      2. null を返す。
    2. inputIndex を、string の要素 lastIndex から取得された文字の input 内のインデックスとする。
    3. result を matcher(input, inputIndex) とする。
    4. result が failure である場合、
      1. sticky が true である場合、
        1. ? Set(regexp, "lastIndex", +0𝔽, true) を実行する。
        2. null を返す。
      2. lastIndex を AdvanceStringIndex(string, lastIndex, fullUnicode) に設定する。
    5. そうでない場合、
      1. 表明: result は MatchState である。
      2. matchSucceeded を true に設定する。
  14. endIndex を result.[[EndIndex]] とする。
  15. fullUnicode が true である場合、endIndex を GetStringIndex(string, endIndex) に設定する。
  16. global が true または sticky が true である場合、
    1. ? Set(regexp, "lastIndex", 𝔽(endIndex), true) を実行する。
  17. capturingGroupsCount を result.[[Captures]] の要素数とする。
  18. 表明: capturingGroupsCount = regexp.[[RegExpRecord]].[[CapturingGroupsCount]]。
  19. 表明: capturingGroupsCount < 232 - 1。
  20. array を ! ArrayCreate(capturingGroupsCount + 1) とする。
  21. 表明: array の "length" プロパティの数学値は capturingGroupsCount + 1 である。
  22. ! CreateDataPropertyOrThrow(array, "index", 𝔽(lastIndex)) を実行する。
  23. ! CreateDataPropertyOrThrow(array, "input", string) を実行する。
  24. match を Match Record { [[StartIndex]]: lastIndex, [[EndIndex]]: endIndex } とする。
  25. indices を新しい空の List とする。
  26. groupNames を新しい空の List とする。
  27. match を indices に追加する。
  28. matchedSubstring を GetMatchString(string, match) とする。
  29. ! CreateDataPropertyOrThrow(array, "0", matchedSubstring) を実行する。
  30. regexp がいずれかの GroupName を含む場合、
    1. groups を OrdinaryObjectCreate(null) とする。
    2. hasGroups を true とする。
  31. そうでない場合、
    1. groups を undefined とする。
    2. hasGroups を false とする。
  32. ! CreateDataPropertyOrThrow(array, "groups", groups) を実行する。
  33. matchedGroupNames を新しい空の List とする。
  34. 1 ≤ i ≤ capturingGroupsCount を満たす各整数 i について、昇順で次を行う。
    1. capture を result.[[Captures]] の ith 要素とする。
    2. capture が undefined である場合、
      1. capturedValue を undefined とする。
      2. undefined を indices に追加する。
    3. そうでない場合、
      1. captureStart を capture.[[StartIndex]] とする。
      2. captureEnd を capture.[[EndIndex]] とする。
      3. fullUnicode が true である場合、
        1. captureStart を GetStringIndex(string, captureStart) に設定する。
        2. captureEnd を GetStringIndex(string, captureEnd) に設定する。
      4. captureRecord を Match Record { [[StartIndex]]: captureStart, [[EndIndex]]: captureEnd } とする。
      5. capturedValue を GetMatchString(string, captureRecord) とする。
      6. captureRecord を indices に追加する。
    4. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(i)), capturedValue) を実行する。
    5. regexp の ith capture が GroupName を使用して定義されていた場合、
      1. groupName をその GroupName の CapturingGroupName とする。
      2. matchedGroupNames が groupName を含む場合、
        1. 表明: capturedValue は undefined である。
        2. undefined を groupNames に追加する。
      3. そうでない場合、
        1. capturedValue が undefined でない場合、groupName を matchedGroupNames に追加する。
        2. 注記: groupName という名前のグループが複数存在する場合、この時点で groups はすでに groupName プロパティを持っている場合がある。ただし、groups はすべてのプロパティが書込み可能なデータプロパティである通常オブジェクトなので、CreateDataPropertyOrThrow の呼出しはそれでも成功することが保証される。
        3. ! CreateDataPropertyOrThrow(groups, groupName, capturedValue) を実行する。
        4. groupName を groupNames に追加する。
    6. そうでない場合、
      1. undefined を groupNames に追加する。
  35. hasIndices が true である場合、
    1. indicesArray を MakeMatchIndicesIndexPairArray(string, indices, groupNames, hasGroups) とする。
    2. ! CreateDataPropertyOrThrow(array, "indices", indicesArray) を実行する。
  36. array を返す。

22.2.7.3 AdvanceStringIndex ( string, index, unicode )

抽象操作 AdvanceStringIndex。引数 string (String)、index (非負整数) および unicode (Boolean)。戻り値:非負整数。 呼び出されると、次の手順を実行する。

  1. 表明: index ≤ 253 - 1。
  2. unicode が false である場合、index + 1 を返す。
  3. length を string の長さとする。
  4. index + 1 ≥ length である場合、index + 1 を返す。
  5. codePoint を CodePointAt(string, index) とする。
  6. index + codePoint.[[CodeUnitCount]] を返す。

22.2.7.4 GetStringIndex ( string, codePointIndex )

抽象操作 GetStringIndex。引数 string (String) および codePointIndex (非負整数)。戻り値:非負整数。 6.1.4 で説明されるように string を UTF-16 エンコードされたコードポイントの列として解釈し、そのようなインデックスが存在する場合、コードポイントインデックス codePointIndex に対応するコード単位インデックスを返します。それ以外の場合、string の長さを返します。 呼び出されると、次の手順を実行する。

  1. string が空の String である場合、0 を返す。
  2. length を string の長さとする。
  3. codeUnitCount を 0 とする。
  4. codePointCount を 0 とする。
  5. codeUnitCount < length の間、次を繰り返す。
    1. codePointCount = codePointIndex である場合、codeUnitCount を返す。
    2. codePoint を CodePointAt(string, codeUnitCount) とする。
    3. codeUnitCount を codeUnitCount + codePoint.[[CodeUnitCount]] に設定する。
    4. codePointCount を codePointCount + 1 に設定する。
  6. length を返す。

22.2.7.5 Match Record

Match Record は、正規表現の match または capture の開始および終了インデックスをカプセル化するために使用される Record です。

Match Record は 表 68 に列挙されるフィールドを持ちます。

表 68: Match Record のフィールド
フィールド名 値 意味
[[StartIndex]] a non-negative integer match が開始する(含む)文字列先頭からのコード単位数。
[[EndIndex]] an integer ≥ [[StartIndex]] match が終了する(含まない)文字列先頭からのコード単位数。

22.2.7.6 GetMatchString ( string, match )

抽象操作 GetMatchString。引数 string (String) および match (Matchレコード)。戻り値:String。 呼び出されると、次の手順を実行する。

  1. 表明: match.[[StartIndex]] ≤ match.[[EndIndex]] ≤ string の長さ。
  2. string の match.[[StartIndex]] から match.[[EndIndex]] までの部分文字列を返す。

22.2.7.7 GetMatchIndexPair ( string, match )

抽象操作 GetMatchIndexPair。引数 string (String) および match (Matchレコード)。戻り値:Array。 呼び出されると、次の手順を実行する。

  1. 表明: match.[[StartIndex]] ≤ match.[[EndIndex]] ≤ string の長さ。
  2. CreateArrayFromList(« 𝔽(match.[[StartIndex]]), 𝔽(match.[[EndIndex]]) ») を返す。

22.2.7.8 MakeMatchIndicesIndexPairArray ( string, indices, groupNames, hasGroups )

抽象操作 MakeMatchIndicesIndexPairArray。引数 string (String)、indices (リスト (要素:(Matchレコード または undefined)))、groupNames (リスト (要素:(String または undefined))) および hasGroups (Boolean)。戻り値:Array。 呼び出されると、次の手順を実行する。

  1. n を indices の要素数とする。
  2. 表明: n < 232 - 1。
  3. 表明: groupNames は n - 1 個の要素を持つ。
  4. 注記: groupNames List は indices[1] から始まる indices List と整列した要素を含む。
  5. array を ! ArrayCreate(n) とする。
  6. hasGroups が true である場合、
    1. groups を OrdinaryObjectCreate(null) とする。
  7. そうでない場合、
    1. groups を undefined とする。
  8. ! CreateDataPropertyOrThrow(array, "groups", groups) を実行する。
  9. 0 ≤ i < n を満たす各整数 i について、昇順で次を行う。
    1. matchIndices を indices[i] とする。
    2. matchIndices が undefined でない場合、
      1. matchIndexPair を GetMatchIndexPair(string, matchIndices) とする。
    3. そうでない場合、
      1. matchIndexPair を undefined とする。
    4. ! CreateDataPropertyOrThrow(array, ! ToString(𝔽(i)), matchIndexPair) を実行する。
    5. i > 0 である場合、
      1. name を groupNames[i - 1] とする。
      2. name が undefined でない場合、
        1. 表明: groups は undefined ではない。
        2. 注記: name という名前のグループが複数存在する場合、この時点で groups はすでに name プロパティを持っている場合がある。ただし、groups はすべてのプロパティが書込み可能なデータプロパティである通常オブジェクトなので、CreateDataPropertyOrThrow の呼出しはそれでも成功することが保証される。
        3. ! CreateDataPropertyOrThrow(groups, name, matchIndexPair) を実行する。
  10. array を返す。

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

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

注

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

22.2.9.1 CreateRegExpStringIterator ( regexp, string, global, fullUnicode )

抽象操作 CreateRegExpStringIterator。引数 regexp (Object)、string (String)、global (Boolean) および fullUnicode (Boolean)。戻り値:Object。 呼び出されると、次の手順を実行する。

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

22.2.9.2 %RegExpStringIteratorPrototype% オブジェクト

%RegExpStringIteratorPrototype% オブジェクトは:

22.2.9.2.1 %RegExpStringIteratorPrototype%.next ( )

  1. iteratorObj を this 値とする。
  2. iteratorObj が Object でない場合、TypeError 例外をスローする。
  3. iteratorObj が RegExp String Iterator Object Instance のすべての内部スロット(22.2.9.3 を参照)を持たない場合、TypeError 例外をスローする。
  4. iteratorObj.[[Done]] が true である場合、
    1. CreateIteratorResultObject(undefined, true) を返す。
  5. regexp を iteratorObj.[[IteratingRegExp]] とする。
  6. string を iteratorObj.[[IteratedString]] とする。
  7. global を iteratorObj.[[Global]] とする。
  8. fullUnicode を iteratorObj.[[Unicode]] とする。
  9. match を ? RegExpExec(regexp, string) とする。
  10. match が null である場合、
    1. iteratorObj.[[Done]] を true に設定する。
    2. CreateIteratorResultObject(undefined, true) を返す。
  11. global が false である場合、
    1. iteratorObj.[[Done]] を true に設定する。
    2. CreateIteratorResultObject(match, false) を返す。
  12. matchString を ? ToString(? Get(match, "0")) とする。
  13. matchString が空の String である場合、
    1. thisIndex を ℝ(? ToLength(? Get(regexp, "lastIndex"))) とする。
    2. nextIndex を AdvanceStringIndex(string, 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 インスタンスは、表 69 に列挙される内部スロットを持つ状態で最初に作成されます。

表 69: RegExp String Iterator インスタンスの内部スロット
内部スロット 型 説明
[[IteratingRegExp]] an Object 反復に使用される正規表現。IsRegExp([[IteratingRegExp]]) は初期状態で true です。
[[IteratedString]] a String 反復対象となる String 値。
[[Global]] a Boolean [[IteratingRegExp]] が global であるかどうかを示します。
[[Unicode]] a Boolean [[IteratingRegExp]] が Unicode モードであるかどうかを示します。
[[Done]] a Boolean 反復が完了しているかどうかを示します。