ECMAScript | Свойства объекта-прототипа Регулярных Выражений

ECMAScript | Свойства объекта-прототипа Регулярных Выражений

Объект-прототип RegExp (RegExp prototype object):

  • является %RegExp.prototype%.
  • это обычный объект.
  • не является экземпляром RegExp и не имеет внутреннего слота [[RegExpMatcher]] или каких-либо других внутренних слотов объектов экземпляра RegExp.
  • имеет внутренний слот [[Prototype]], значение которого равно %Object.prototype%.

 

Примечание

Объект-прототип RegExp не имеет собственного свойства «valueOf«; однако он наследует свойство «valueOf» от объекта-прототипа Object.

 

RegExp.prototype.constructor

Начальное значение RegExp.prototype.constructor — это %RegExp%.

 

RegExp.prototype.exec ( string )

Выполняет сопоставление регулярного выражения из строки string с регулярным выражением и возвращает объект массива Array, содержащий результаты сопоставления, или null, если строка string не сопоставима.

Строка ToString(string) ищет вхождения шаблона регулярного выражения следующим образом:

1. Пусть R будет значением этого this.
2. Выполнить ? RequireInternalSlot(R, [[RegExpMatcher]]).
3. Пусть S будет ? ToString(string).
4. Вернуть ? RegExpBuiltinExec(R, S).

 

RegExpExec ( R, S ) — regular expression execution

Абстрактная операция RegExpExec (Выполнение регулярного выражения) принимает аргументы R и S. При вызове она выполняет следующие шаги:

1. Утверждено: тип Type(R) - это Объект.
2. Утверждено: тип Type(S) - это Строка.
3. Пусть exec будет ? получить Get(R, "exec").
4. Если IsCallable(exec) является true (истинно), то
   а. Пусть result будет ? вызов Call(exec, R, «S»).
   b. Если тип Type(result) не является ни Object, ни Null, генерировать исключение TypeError.
   c. Вернуть результат result.
5. Выполнить ? RequireInternalSlot(R, [[RegExpMatcher]]).
6. Вернуть ? RegExpBuiltinExec(R, S).
Примечание

Если вызываемое свойство «exec» не найдено, этот алгоритм возвращается к попытке использовать встроенный алгоритм сопоставления RegExp. Это обеспечивает совместимое поведение для кода, написанного для предыдущих выпусков, в которых большинство встроенных алгоритмов, использующих регулярные выражения, не выполняли динамический поиск свойств «exec«.

 

RegExpBuiltinExec ( R, S )

Абстрактная операция RegExpBuiltinExec (Выполнение встроенного регулярного выражения) принимает аргументы R и S. При вызове она выполняет следующие шаги:

1. Утверждено: R - это инициализированный экземпляр RegExp.
2. Утверждено: Тип Type(S) - Строка.
3. Пусть длина length будет количеством кодовых единиц в S.
4. Пусть lastIndex будет (? ToLength(? Get(R, "lastIndex"))).
5. Пусть flags будет R.[[OriginalFlags]].
6. Если flags содержит "g", пусть global будет true (истина); иначе пусть global будет false (ложь).
7. Если flags содержит "y", пусть sticky будет true (истина); иначе пусть sticky будет false (ложь).
8. Если global является false и sticky является false, установите lastIndex равным 0.
9. Пусть сопоставитель matcher будет R.[[RegExpMatcher]].
10. Если flags содержит «u», пусть fullUnicode будет true (истина); иначе пусть fullUnicode будет false (ложь).
11. Пусть matchSucceeded будет false.
12. Повторите, пока matchSucceeded имеет значение false,
   а. Если lastIndex > length, то
      i. Если global является true (истинно) или sticky является true (истинно), то
         1. Выполнить ? установить Set(R, "lastIndex", +0𝔽, true).
      ii. Вернуть null.
   b. Пусть r - это matcher(S, lastIndex).
   c. Если r - это неудача failure, то
      i. Если sticky является true (истинно), то
         1. Выполнить ? установить Set(R, "lastIndex", +0𝔽, true).
         2. Вернуть null.
      ii. Установите lastIndex на AdvanceStringIndex(S, lastIndex, fullUnicode).
   d. Еще,
      i. Утверждено: r - это состояние State.
      ii. Установите для matchSucceeded значение true.
13. Пусть e будет значением endIndex для r.
14. Если fullUnicode является true (истинно), то
   а. e - это индекс в списке входных символов Input, производный от S, сопоставленный с помощью сопоставителя matcher. Пусть eUTF будет наименьшим индексом в S, который соответствует символу в элементе e из Input. Если e больше или равно количеству элементов в Input, то eUTF - это количество кодовых единиц в S.
   b. Установите e на eUTF.
15. Если global - true или sticky - true, то
   а. Выполнить ? установите Set(R, "lastIndex", 𝔽(e), true).
16. Пусть n будет количеством элементов в Списке захвата captures от r. (Это то же значение, что и NcapturingParens 22.2.2.1.)
17. Утверждено: n < 232 - 1.
18. Пусть А будет ! ArrayCreate(n + 1).
19. Утверждено: математическое значение свойства "length" A равно n + 1.
20. Выполнить ! CreateDataPropertyOrThrow(A, "index", 𝔽(lastIndex)).
21. Выполнить ! CreateDataPropertyOrThrow(A, "index", S).
22. Пусть matchedSubstr будет подстрокой S от lastIndex до e.
23. Выполнить ! CreateDataPropertyOrThrow(A, "0", matchedSubstr).
24. Если R содержит любое GroupName, то
   а. Пусть groups будут  ! OrdinaryObjectCreate(null).
25. Иначе,
   а. Пусть группы groups не определены - являются undefined.
26. Выполнить ! CreateDataPropertyOrThrow(A, "groups", groups).
27. Для каждого целого числа i такого, что i ≥ 1 и in, в порядке возрастания выполните
   а. Пусть captureI будет i-м элементом Списка захватов captures из r.
   b. Если captureI является undefined(не определен), пусть captureValue является undefined(не определен).
   c. Иначе, если fullUnicode является true (истинно), то
      i. Утверждено: captureI - это Список кодовых точек.
      ii. Пусть captureValue будет ! CodePointsToString(captureI).
   d. Еще,
      i. Утверждено: fullUnicode является false (ложно).
      ii. Утверждено: captureI - это Список кодовых единиц.
      iii. Пусть captureValue будет значением String, состоящим из кодовых единиц captureI.
   е. Выполнить ! CreateDataPropertyOrThrow(A, ! ToString(𝔽(i)), capturedValue).
   f. Если i-й захват R был определен с помощью GroupName, то
      i. Пусть s будет CapturingGroupName соответствующего RegExpIdentifierName.
      ii. Выполнить ! CreateDataPropertyOrThrow(groups, s, capturedValue).
28. Вернуть А.

AdvanceStringIndex ( S, index, unicode )

Абстрактная операция AdvanceStringIndex (Предварительный указатель строки) принимает аргументы S (строка), индекс index (неотрицательное целое число) и юникод unicode (логическое значение). При вызове он выполняет следующие шаги:

1. Утверждено: индекс ≤ 253 - 1.
2. Если unicode равен false, вернуть index + 1.
3. Пусть длина length будет количеством кодовых единиц в S.
4. Если index + 1 ≥ length, вернуть index + 1.
5. Пусть cp будет ! CodePointAt(S, index).
6. Вернуть index + cp.[[CodeUnitCount]].

 

get RegExp.prototype.dotAll

RegExp.prototype.dotAll — это свойство средства доступа, функция которого не определена (является undefined). Его функция доступа get выполняет следующие шаги:

1. Пусть R будет значением this.
2. Пусть cu будет единицей кода 0x0073 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА S).
3. Вернуть ? RegExpHasFlag(R, cu).

RegExpHasFlag ( R, codeUnit )

Абстрактная операция RegExpHasFlag (Имеет ли регулярное выражение флаг) принимает аргументы R (значение языка ECMAScript) и codeUnit (единица кода). При вызове она выполняет следующие шаги:

1. Если Тип Type(R) не является Объектом, выбросить исключение TypeError.
2. Если R не имеет внутреннего слота [[OriginalFlags]], тогда
   а. Если SameValue(R, %RegExp.prototype%) является true, вернуть undefined.
   b. В противном случае выбросить исключение TypeError.
3. Пусть flags будет R.[[OriginalFlags]].
4. Если flags содержит codeUnit, вернуть true.
5. Вернуть false.

 

get RegExp.prototype.flags

RegExp.prototype.flags — это свойство средства доступа, функция которого не определена (является undefined). Его функция доступа get выполняет следующие шаги:

1. Пусть R будет значением this.
2. Если Тип Type(R) не является Объектом, выбросить исключение TypeError.
3. Пусть результатом result будет пустая Строка.
4. Пусть global будет ! ToBoolean(? Get(R, "global")).
5. Если global является true (истинно), добавьте кодовую единицу 0x0067 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА G) в качестве последней кодовой единицы результата result.
6. Пусть ignoreCase будет ! ToBoolean(? Get(R, "ignoreCase")).
7. Если ignoreCase является true (истинно), добавьте кодовую единицу 0x0069 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА I) в качестве последней единицы кода результата result.
8. Пусть multiline будет ! ToBoolean(? Get(R, "multiline")).
9. Если multiline является true (истинно), добавьте кодовую единицу 0x006D (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА M) как последняя кодовая единица результата result.
10. Пусть dotAll будет ! ToBoolean(? Get(R, "dotAll")).
11. Если dotAll является true (истинно), добавьте кодовую единицу 0x0073 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА S) в качестве последней единицы кода результата result.
12. Да unicode будет ! ToBoolean(? Get(R, "unicode")).
13. Если unicode является true (истинно), добавьте кодовую единицу 0x0075 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА U) в качестве последней единицы кода результата result.
14. Пусть sticky будет ! ToBoolean(? Get(R, "sticky")).
15. Если sticky является true (истинно), добавьте кодовую единицу 0x0079 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА Y) в качестве последней единицы кода результата result.
16. Вернуть результат result.

 

get RegExp.prototype.global

RegExp.prototype.global — это свойство доступа, функция установки доступа которого не определена (является undefined). Его функция доступа get выполняет следующие шаги:

1. Пусть R будет значением this.
2. Пусть cu будет единицей кода 0x0067 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА G).
3. Вернуть ? RegExpHasFlag(R, cu).

 

get RegExp.prototype.ignoreCase

RegExp.prototype.ignoreCase — это свойство средства доступа, функция установки доступа которого не определена (является undefined). Его функция доступа get выполняет следующие шаги:

1. Пусть R будет значением this.
2. Пусть cu будет единицей кода 0x0069 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА I).
3. Вернуть ? RegExpHasFlag(R, cu).

 

RegExp.prototype [ @@match ] ( string )

Когда метод сопоставления @@match вызывается с аргументом string, выполняются следующие шаги:

1. Пусть rx будет значением this.
2. Если Type(rx) не является Object, выбросить исключение TypeError.
3. Пусть S будет ? ToString(string).
4. Пусть global будет ! ToBoolean(? Get(rx, "global")).
5. Если global равно false, то
   а. Вернуть ? RegExpExec(rx, S).
6. Иначе,
   а. Утверждено: global является true.
   b. Пусть fullUnicode будет ! ToBoolean(? Get(rx, "unicode")).
   c. Выполнить ? установить Set(rx, "lastIndex", +0𝔽, true).
   d. Пусть А будет ! ArrayCreate(0).
   е. Пусть n равно 0.
   f. Повторить,
      i. Пусть result будет ? RegExpExec(rx, S).
      ii. Если результат result равен null, то
         1. Если n = 0, вернуть null.
         2. Верните A.
      iii. Иначе,
         1. Пусть matchStr будет ? ToString(? Get(result, "0")).
         2. Выполнить ! CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)), matchStr).
         3. Если matchStr - пустая строка, тогда
            а. Пусть thisIndex будет (? ToLength(? Get(rx, "lastIndex"))).
            b. Пусть nextIndex будет AdvanceStringIndex(S, thisIndex, fullUnicode).
            c. Выполнить ? Установить Set(rx, "lastIndex", 𝔽(nextIndex), true).
4. Установите n равным n + 1.

Значение свойства «name» этой функции — «[Symbol.match]«.

 

Примечание

Свойство @@match используется абстрактной операцией IsRegExp для идентификации объектов, которые имеют базовое поведение регулярных выражений. Отсутствие свойства @@match или наличие такого свойства, значение которого не приводит к логическому принуждению к true, указывает на то, что объект не предназначен для использования в качестве объекта регулярного выражения.

 

RegExp.prototype [ @@matchAll ] ( string )

Когда метод @@matchAll вызывается с аргументом string, выполняются следующие шаги:

1. Пусть R будет значением this.
2. Если Тип Type(R) не является Объектом, выбросить исключение TypeError.
3. Пусть S будет ? ToString(string).
4. Пусть C будет ? SpeciesConstructor(R, %RegExp%).
5. Пусть флаги flags будут ? ToString(? Get(R, "flags")).
6. Пусть сопоставитель matcher будет ? Построить Construct(C, «R, flags»).
7. Пусть lastIndex будет ? ToLength(? Get(R, "lastIndex")).
8. Выполнить ? Установить Set(matcher, "lastIndex", lastIndex, true).
9. Если flags содержит "g", пусть global будет true (истинным).
10. Иначе, пусть global будет false (ложным).
11. Если flags содержит «u», пусть fullUnicode будет true (истинным).
12. Иначе пусть fullUnicode будет false (ложным).
13. Вернуть ! CreateRegExpStringIterator(matcher, S, global, fullUnicode).

Значение свойства «name» этой функции является «[Symbol.matchAll]«.

 

get RegExp.prototype.multiline

RegExp.prototype.multiline — это свойство средства доступа, функция которого не определена — является undefined. Его функция доступа get выполняет следующие шаги:

1. Пусть R будет значением this.
2. Пусть cu будет единицей кода 0x006D (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА M).
3. Вернуть ? RegExpHasFlag(R, cu).

 

RegExp.prototype [ @@replace ] ( string, replaceValue )

Когда метод @@replace вызывается с аргументами string и replaceValue, выполняются следующие шаги:

1. Пусть rx будет значением this.
2. Если Type(rx) не является Object, выбросить исключение TypeError.
3. Пусть S будет ? ToString(string).
4. Пусть lengthS будет количеством элементов кодовой единицы в S.
5. Пусть functionReplace будет IsCallable(replaceValue).
6. Если functionReplace имеет значение false, тогда
   а. Установите replaceValue на ? ToString(replaceValue).
7. Пусть global будет ! ToBoolean(? Get(rx, "global")).
8. Если global является true (истинно), то
   а. Пусть fullUnicode будет ! ToBoolean(? Get(rx, "unicode")).
   b. Выполнить ? Установить Set(rx, "lastIndex", +0𝔽, true).
9. Пусть результаты results будут новым пустым Списком.
10. Пусть сделано done будет false.
11. Повторить, пока done является false,
   а. Пусть результат result будет ? RegExpExec(rx, S).
   b. Если результат равен null, установите для параметра done значение true.
   c. Иначе,
      i. Добавьте результат result в конец результатов results.
      ii. Если global имеет значение false, установите для параметра done значение true.
      iii. Иначе,
         1. Пусть matchStr будет ? ToString(? Get(result, "0")).
         2. Если matchStr - это пустая Строка, тогда
            а. Пусть thisIndex будет (? ToLength(? Get(rx, "lastIndex"))).
            b. Пусть nextIndex будет AdvanceStringIndex(S, thisIndex, fullUnicode).
            c. Выполнить ? Установить Set(rx, "lastIndex", 𝔽(nextIndex), true).
12. Пусть accumulatedResult будет пустой Строкой.
13. Пусть nextSourcePosition равно 0.
14. Для каждого элемента result из results выполните
   а. Пусть resultLength будет ? LengthOfArrayLike(result).
   b. Пусть nCapture будет max(resultLength - 1, 0).
   c. Пусть matched будет ? ToString(? Get(result, "0")).
   d. Пусть matchLength будет числом кодовых единиц matched.
   е. Пусть position будет ? ToIntegerOrInfinity(? Get(result, "index")).
   f. Установите позицию position на результат зажима position от 0 до lengthS.
   g. Пусть n равно 1.
   h. Пусть captures будет новым пустым Списком.
   i. Повторите, пока nnCapture,
      i. Пусть capN будет ? Получить Get(result, ! ToString(𝔽(n))).
      ii. Если capN не является undefined, тогда
         1. Установите capN на ? ToString(capN).
      iii. Добавьте capN как последний элемент захвата captures.
      iv. Установите n равным n + 1.
   j. Пусть namedCaptures будет ? Получить Get(result, "groups").
   k. Если functionReplace является true, то
      i. Пусть replacerArgs будет «matched».
      ii. Добавить в порядке Списка элементы захватов captures в конец Списка replacerArgs.
      iii. Добавьте 𝔽(position) и S к replacerArgs.
      iv. Если namedCaptures не является undefined, тогда
         1. Добавьте namedCaptures в качестве последнего элемента replacerArgs.
      v. Пусть replValue будет ? Вызов Call(replaceValue, undefined, replacerArgs).
      vi. Пусть replacement будет ? ToString(replValue).
   l. Иначе,
      i. Если namedCaptures не является undefined, тогда
         1. Установите для namedCaptures значение ? ToObject(namedCaptures).
      ii. Пусть replacement будет ? GetSubstitution(matched, S, position, captures, namedCaptures, replaceValue).
   m. Если positionnextSourcePosition, то
      i. ПРИМЕЧАНИЕ: положение position обычно не должно сдвигаться назад. Если это так, это указывает на некорректное поведение подкласса RegExp или использование побочного эффекта, инициируемого доступом, для изменения глобального флага или других характеристик rx. В таких случаях соответствующая подстановка игнорируется.
      ii. Задайте для accumulatedResult конкатенацию строк для accumulatedResult, подстроку S из nextSourcePosition в положение position и замену replacement.
      iii. Установите для nextSourcePosition значение position + matchLength.
15. Если nextSourcePositionlengthS, вернуть accumulatedResult.
16. Верните конкатенацию строки аккумуляторного результата accumulatedResult и подстроки S из nextSourcePosition.

Значение свойства «name» этой функции — «[Symbol.replace]«.

 

RegExp.prototype [ @@search ] ( string )

Когда метод поиска @@search вызывается с аргументом string, выполняются следующие шаги:

1. Пусть rx будет значением this.
2. Если Type(rx) не является Object, выбросить исключение TypeError.
3. Пусть S будет ? ToString(string).
4. Пусть previousLastIndex будет ? Получить Get(rx, "lastIndex").
5. Если SameValue(previousLastIndex, +0𝔽) является false (ложно), то
   а. Выполнять ? Установить Set(rx, "lastIndex", +0𝔽, true).
6. Пусть result будет ? RegExpExec(rx, S).
7. Пусть currentLastIndex будет ? Получить Get(rx, "lastIndex").
8. Если SameValue(currentLastIndex, previousLastIndex) является false (ложно), то
   а. Выполнить ? Установить Set(rx, "lastIndex", previousLastIndex, true).
9. Если результат result является null, вернуть -1𝔽.
10. Вернуть ? Получить Get(result, "index").

Значение свойства «name» этой функции — «[Symbol.search]«.

 

Примечание

Свойства «lastIndex» и «global» этого объекта RegExp игнорируются при выполнении поиска. Свойство «lastIndex» оставлено без изменений.

 

get RegExp.prototype.source

RegExp.prototype.source — это свойство средства доступа, функция которого не определена — является undefined. Его функция доступа get выполняет следующие шаги:

1. Пусть R будет значением this.
2. Если Тип Type(R) не является объектом, выбросить исключение TypeError.
3. Если R не имеет внутреннего слота [[OriginalSource]], тогда
   а. Если SameValue(R, %RegExp.prototype%) является true (истинно), вернуть "(?:)".
   b. В противном случае выбросить исключение TypeError.
4. Утверждено: R имеет внутренний слот [[OriginalFlags]].
5. Пусть src будет R.[[OriginalSource]].
6. Пусть flags будет R.[[OriginalFlags]].
7. Верните EscapeRegExpPattern(src, flags).

 

RegExp.prototype [ @@split ] ( string, limit )

Примечание 1

Возвращает объект Array, в котором были сохранены подстроки результата преобразования строки string в String. Подстроки определяются путем поиска слева направо совпадений с регулярным выражением значения this; эти вхождения не являются частью какой-либо строки в возвращаемом массиве, но служат для разделения значения String.

Значение this может быть пустым регулярным выражением или регулярным выражением, которое может соответствовать пустой Строке. В этом случае регулярное выражение не соответствует пустой подстроке в начале или конце входной строки, а также не соответствует пустой подстроке в конце предыдущего совпадения разделителя. (Например, если регулярное выражение соответствует пустой строке, строка разбивается на отдельные элементы кодовой единицы; длина результирующего массива равна длине строки, и каждая подстрока содержит одну кодовую единицу.) Только первое совпадение по заданному индексу String рассматривается, даже если обратное отслеживание может привести к непустому совпадению подстроки по этому индексу. (Например, /a*?/[Symbol.split]("ab") оценивается как массив ["a", "b"], в то же время /a*/[Symbol.split]("ab") оценивается как массив ["", "b"].)

Если строка string является пустой строкой (или преобразуется в нее), результат зависит от того, может ли регулярное выражение соответствовать пустой Строке. Если это возможно, результирующий массив не содержит элементов. В противном случае результирующий массив будет содержать один элемент — пустую Строку.

Если регулярное выражение содержит «захватывающие скобки» (capturing parentheses), то каждый раз, когда сопоставляется разделитель 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.

 

Когда вызывается метод разделения @@split, выполняются следующие шаги:

1. Пусть rx будет значением этого this.
2. Если тип Type(rx) не является Object, выбросить исключение TypeError.
3. Пусть S будет ? ToString(string).
4. Пусть C будет ? SpeciesConstructor(rx, %RegExp%).
5. Пусть flags будут ? ToString(? Get(rx, "flags")).
6. Если flags содержит "u", пусть unicodeMatching будет истинным true.
7. В противном случае пусть unicodeMatching будет false.
8. Если flags содержит "y", пусть newFlags будет флагами flags.
9. Иначе, пусть newFlags будет конкатенацией строк из флагов flags и "y".
10. Пусть splitter будет ? Построить Construct(C, «rx, newFlags»).
11. Пусть А будет ! ArrayCreate(0).
12. Пусть lengthA равно 0.
13. Если limit является undefined (не определен), пусть lim будет 232 - 1; иначе пусть lim будет (? ToUint32(limit)).
14. Если lim равен 0, вернуть A.
15. Пусть size будет длиной S.
16. Если размер size равен 0, то
  а. Пусть z будет ? RegExpExec(splitter, S).
  b. Если z не является null, верните A.
  c. Выполнить ! CreateDataPropertyOrThrow(A, "0", S).
  d. Вернуть А.
17. Пусть p равно 0.
18. Пусть q равно p.
19. Повторите, пока q < size,
  а. Выполнить ? Установить Set(splitter, "lastIndex", 𝔽(q), true).
  b. Пусть z будет ? RegExpExec(splitter, S).
  c. Если z равно нулю, установите q равным AdvanceStringIndex(S, q, unicodeMatching).
  d. Иначе,
    i. Пусть e будет (? ToLength(? Get(splitter, "lastIndex"))).
    ii. Установите для e значение min(e, size).
    iii. Если e = p, установите q равным AdvanceStringIndex(S, q, unicodeMatching).
    iv. Иначе,
      1. Пусть T - подстрока S от p до q.
      2. Выполните ! CreateDataPropertyOrThrow(A, ! ToString(𝔽(lengthA)), T).
      3. Установите lengthA на lengthA + 1.
      4. Если lengthA = lim, вернуть A.
      5. Установите p на e.
      6. Пусть numberOfCaptures будет ? LengthOfArrayLike(z).
      7. Установите для numberOfCaptures значение max(numberOfCaptures - 1, 0).
      8. Пусть i равно 1.
      9. Повторите, пока inumberOfCaptures,
        а. Пусть nextCapture будет ? Получите Get(z, ! ToString(𝔽(i))).
        b. Выполнить ! CreateDataPropertyOrThrow(A, ! ToString(𝔽(lengthA)), nextCapture).
        c. Установите i в i + 1.
        d. Установите lengthA на lengthA + 1.
        е. Если lengthA = lim, вернуть A.
     10. Установите q на p.
20. Пусть T будет подстрокой S от p до size.
21. Выполнить ! CreateDataPropertyOrThrow(A, ! ToString(𝔽(lengthA)), T).
22. Вернуть А.

Значение свойства «name» этой функции — «[Symbol.split]«.

 

Примечание 2

Метод @@split игнорирует значение «global» и «sticky» свойств этого объекта RegExp.

 

get RegExp.prototype.sticky

RegExp.prototype.sticky — это свойство средства доступа, функция доступа которого не определена (является undefined). Его функция доступа get выполняет следующие шаги:

1. Пусть R будет значением этого this.
2. Пусть cu будет единицей кода 0x0079 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА Y).
3. Вернуть ? RegExpHasFlag(R, cu).

 

RegExp.prototype.test ( S )

Предпринимаются следующие шаги:

1. Пусть R будет значением этого this.
2. Если Тип Type(R) не является объектом, выбросить исключение TypeError.
3. Пусть строка string будет ? ToString(S).
4. Пусть совпадение match будет ? RegExpExec(R, string).
5. Если совпадение match не является null, вернуть истину true; иначе верните false.

 

RegExp.prototype.toString ( )

Логика работы:

1. Пусть R будет значением этого this.
2. Если Тип Type(R) не является объектом, выбросить исключение TypeError.
3. Пусть шаблон pattern будет ? ToString(? Get(R, "source")).
4. Пусть флаги flags будут ? ToString(? Get(R, "flags")).
5. Пусть результатом result будет конкатенация строк "/", pattern, "/" и flags.
6. Вернуть результат result.

 

Примечание

Возвращенная строка имеет форму RegularExpressionLiteral, который оценивает другой объект RegExp с таким же поведением, что и этот объект.

 

get RegExp.prototype.unicode

RegExp.prototype.unicode — это свойство средства доступа, функция доступа которого не определена (является undefined). Его функция доступа get выполняет следующие шаги:

1. Пусть R будет значением этого this.
2. Пусть cu будет единицей кода 0x0075 (СТРОЧНАЯ ЛАТИНСКАЯ БУКВА U).
3. Вернуть ? RegExpHasFlag(R, cu).

 

Информационные ссылки

Предыдущий раздел — Свойства конструктора Регулярных Выражений

Стандарт ECMAScript — Раздел «Properties of the RegExp Prototype Object» — https://tc39.es/ecma262/#sec-properties-of-the-regexp-prototype-object

ECMAScript | Условные обозначения