ECMAScript | Шаблон (Pattern) | Регулярные выражения (Regular Expression)

ECMAScript | Шаблон (Pattern) | Регулярные выражения (Regular Expression)

Производство шаблона Pattern :: Disjunction оценивается следующим образом:

1. Оцените Разъединение Disjunction с 1 в качестве аргумента направления direction, чтобы получить Сопоставитель Matcher m.
2. Верните новое Абстрактное Замыкание с параметрами (str, index), которое захватывает m и при вызове выполняет следующие шаги:
   а. Утверждено: Тип(str) - это String.
   b. Утверждено: index - это неотрицательное целое число, которое ≤ длины str.
   c. Если Unicode является true , пусть Input будет ! StringToCodePoints(str). В противном случае пусть Input будет Списком, элементы которого являются кодовыми единицами, которые являются элементами str. Входные данные Input будут использоваться во всех алгоритмах в 22.2.2. Каждый элемент Input считается символом.
   d. Пусть InputLength будет количеством символов, содержащихся в Input. Этот псевдоним будет использоваться во всех алгоритмах в 22.2.2.
   е. Пусть listIndex будет индексом внутри Input из символа, который был получен из элемента index из str.
   f. Пусть c будет новым продолжением с параметрами (y), которое ничего не фиксирует и при вызове выполняет следующие шаги:
      i. Утверждено: y - это Состояние (State).
      ii. Вернуть y.
   g. Пусть cap будет Списком неопределенных значений undefined из NcapturingParens, проиндексированных от 1 до NcapturingParens.
   h. Пусть x будет состоянием (listIndex, cap).
   i. Верните m(x, c).

 

Примечание

Шаблон оценивает («компилирует») в значение Абстрактного Замыкания. RegExpBuiltinExec может затем применить эту процедуру к String и смещению внутри String, чтобы определить, будет ли совпадать шаблон, начиная именно с этого смещения внутри String, и, если он совпадает, каковы будут значения захватывающих скобок. Алгоритмы в 22.2.2 разработаны таким образом, что компиляция Шаблона может вызвать исключение SyntaxError; с другой стороны, как только Шаблон успешно скомпилирован, применение результирующего Абстрактного Замыкания для поиска совпадения в строке не может вызвать исключение (за исключением любых определенных реализацией исключений, которые могут возникать где угодно, например, из-за нехватки памяти).

 

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

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