В описаниях ниже используются следующие псевдонимы (aliases):
Input
Input — это Список, элементы которого являются символами String, которым соответствует шаблон регулярного выражения. Каждый символ является либо «единицей кода» (code unit), либо «точкой кода» (code point), в зависимости от типа задействованного шаблона. Обозначение Input[n] означает n-ый символ Input, где n может находиться в диапазоне от 0 (включительно) до InputLength (исключая).
InputLength
InputLength — это количество символов в поле Input.
NcapturingParens
NcapturingParens — это общее количество скобок с левым захватом (т. е. общее количество узлов синтаксического анализа из Atom :: ( GroupSpecifier Disjunction ) ) в паттерне (шаблоне).
Захватывающая слева круглая скобка — это любой ( символ паттерна (шаблона), которому соответствует производству ( терминал из Atom :: ( GroupSpecifier Disjunction ).
DotAll
DotAll является true (истинно), если внутренний слот [[OriginalFlags]] объекта RegExp содержит «s«, в противном случае — false (ложь).
IgnoreCase
IgnoreCase является true (истинно), если внутренний слот [[OriginalFlags]] объекта RegExp содержит «i», в противном случае — false (ложь).
Multiline
Multiline (Многострочность) true (истинна), если внутренний слот [[OriginalFlags]] объекта RegExp содержит «m«, в противном случае — false (ложь).
Unicode
Unicode имеет значение true (истинно), если внутренний слот [[OriginalFlags]] объекта RegExp содержит «u«, в противном случае — false.
WordCharacters
WordCharacters — это математический набор, который представляет собой объединение всех шестидесяти трех символов в «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_» (буквы, числа и U+005F (LOW LINE — НИЖНЯЯ ЛИНИЯ) в блоке Unicode Basic Latin), и все символы c, для которых c отсутствует в этом наборе, но есть Canonicalize(c).
WordCharacters не может содержать более шестидесяти трех символов, если Unicode и IgnoreCase не имеют значения true.
Псевдоним | Зачем нужен? | Значение по умолчанию |
---|---|---|
s | Учитывает все точки | false |
i | Игнорирует регистр символов | false |
m | Учитывает многострочность | false |
u | Учитывает символы Unicode | false |
Кроме того, в нижеследующих описаниях используются следующие внутренние структуры данных:
CharSet
CharSet (Набор Символов) — это математический набор символов. Когда флаг Unicode является true, «все символы» означает набор символов, содержащий все значения «кодовой точки» (code point); в противном случае «все символы» означает набор символов, содержащий все значения «кодовых единиц» (code unit).
State
State (Состояние) — это упорядоченная пара (endIndex, captures), где:
- endIndex — целое число (integer)
- captures — это Список значений NcapturingParens.
Состояния используются для представления состояний частичного совпадения в алгоритмах сопоставления регулярных выражений.
endIndex равен единице плюс индекс последнего входного символа, совпадающего на данный момент с паттерном (шаблоном), а captures содержит результаты захвата круглых скобок.
n-ый элемент из захвата captures — это либо Список символов, который представляет значение, полученное n-ым набором захватывающих скобок, либо undefined, если n-ый набор захватывающих скобок еще не достигнут. Из-за обратного отслеживания многие состояния могут использоваться в любой момент в процессе сопоставления.
MatchResult
MatchResult (Результат Сопоставления) — это либо Состояние State, либо сбой специального токена failure
, который указывает, что сопоставление не удалось.
Continuation
Continuation (Продолжение) — это Абстрактное Замыкание, которое принимает один аргумент состояния и возвращает результат сопоставления MatchResult. Продолжение пытается сопоставить оставшуюся часть (указанную захваченными значениями замыкания) паттерна (шаблона) с входом Input, начиная с промежуточного Состояния, заданного его аргументом State. Если сопоставление завершается успешно, Продолжение возвращает конечное Состояние State, которого оно достигло; если совпадение не удается, продолжение возвращает отказ — failure
.
Matcher
Matcher (Сопоставитель) — это Абстрактное Замыкание, которое принимает два аргумента — Состояние State и Продолжение Continuation — и возвращает результат сопоставления MatchResult.
Matcher пытается сопоставить средний подшаблон (заданный захваченными значениями замыкания) шаблона с Input, начиная с промежуточного состояния, заданного его аргументом State. Аргумент продолжения Continuation должен быть закрытием, которое сопоставляетс остальную часть паттерна (шаблона).
После сопоставления подшаблона из шаблона для получения нового State, Matcher затем вызывает Continuation для этого нового State, чтобы проверить, может ли остальная часть шаблона также совпадать. Если может, Сопоставитель возвращает состояние, возвращенное продолжением; в противном случае Matcher может пробовать разные варианты выбора в своих «точках выбора» (choice points), многократно вызывая продолжение, пока либо не добьется успеха, либо все возможности не будут исчерпаны.
Информационные ссылки
Стандарт ECMAScript — Раздел «22.2.2.1 Notation» — https://tc39.es/ecma262/#sec-notation