ECMAScript | Экранирующий Атом (AtomEscape) | Регулярные выражения (Regular Expression)

ECMAScript | Экранирующий Атом (AtomEscape) | Регулярные выражения (Regular Expression)

 

С параметром направления direction.

Производство экранирующего Атома — AtomEscape :: DecimalEscape оценивается следующим образом:

1. Вычислите DecimalEscape, чтобы получить целое число n.
2. Утверждено: nNcapturingParens.
3. Вернуть ! BackreferenceMatcher(n, direction).

Производство экранирующего Атома — AtomEscape :: CharacterEscape оценивается следующим образом:

1. Оцените CharacterEscape, чтобы получить символ ch.
2. Пусть A будет одно-элементным CharSet, содержащим символ ch.
3. Вернуть ! CharacterSetMatcher(A, false, direction).

Производство экранирующего Атома — AtomEscape :: CharacterClassEscape оценивается следующим образом:

1. Вычислите CharacterClassEscape, чтобы получить CharSet A.
2. Вернуть ! CharacterSetMatcher(A, false, direction).

 

Примечание

Управляющая последовательность в форме \, за которой следует ненулевое десятичное число n, соответствует результату n-го набора захватывающих скобок (22.2.2.1). Будет ошибкой, если в регулярном выражении меньше n захватывающих скобок. Если в регулярном выражении есть n или более захватывающих скобок, но n-я скобка является undefined, потому что она ничего не захватила, то обратная ссылка всегда выполняется успешно.

 

Производство экранирующего Атома — AtomEscape :: k GroupName оценивается следующим образом:

1. Найдите в охватывающем Шаблоне Pattern экземпляр GroupSpecifier, содержащий RegExpIdentifierName, у которого CapturingGroupName совпадает с CapturingGroupName для RegExpIdentifierName, содержащегося в GroupName.
2. Утверждено: найден уникальный такой GroupSpecifier.
3. Пусть parenIndex будет числом скобок с левым захватом во всем регулярном выражении, которые встречаются слева от расположенного GroupSpecifier. Это общее количество узлов синтаксического анализа Atom :: ( GroupSpecifier Disjunction ) до или включающих обнаруженный GroupSpecifier, включая непосредственно включающий Atom.
4. Вернуть ! BackreferenceMatcher(parenIndex, direction).

 

BackreferenceMatcher ( n, direction )

Абстрактная операция BackreferenceMatcher (Сопоставитель обратных ссылок) принимает аргументы n (положительное целое число) и направление direction (1 или -1). При вызове он выполняет следующие шаги:

1. Утверждено: n ≥ 1.
2. Верните новый Matcher с параметрами (x, c), который фиксирует n и направление direction и при вызове выполняет следующие шаги:
   а. Утверждено: x - это Состояние (State).
   b. Утверждено: c - это Продолжение (Continuation).
   c. Пусть cap будет списком захвата captures для x.
   d. Пусть s будет cap[n].
   е. Если s является undefined, вернуть c(x).
   f. Пусть e будет endIndex для x.
   g. Пусть len будет количеством элементов в s.
   h. Пусть f будет e + direction × len.
   i. Если f < 0 или f > InputLength, вернуть ошибку failure.
   j. Пусть g будет min(e, f).
   k. Если существует целое число i между 0 (включительно) и len (исключающее), такое, что Canonicalize(s[i]) не является тем же символьным значением, что и Canonicalize(Input [g + i]), вернуть ошибку failure.
   l. Пусть y будет Состоянием (f, cap).
   m. Верните c(y).

 

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

Предыдущий раздел — Атом (Atom) | Регулярные выражения (Regular Expression)

Стандарт ECMAScript — Раздел «AtomEscape» — https://tc39.es/ecma262/#sec-atomescape