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

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

Примечание 1

В этот раздел внесены поправки в B.1.2.4.

 

Шаблон регулярного выражения преобразуется в Абстрактное Замыкание с помощью процесса, описанного ниже. При реализации рекомендуется использовать более эффективные алгоритмы, чем перечисленные ниже, если результаты остаются одинаковыми. Абстрактное Замыкание используется как значение внутреннего слота [[RegExpMatcher]] объекта RegExp.

Шаблон (Pattern) — это либо шаблон BMP (Basic Multilingual Plane), либо шаблон Unicode, в зависимости от того, содержат ли связанные с ним флаги букву u.

Шаблон BMP соответствует строке (String), интерпретируемой как состоящая из последовательности 16-битных значений, которые являются кодовыми точками Unicode в диапазоне «базовой многоязычной плоскости» (Basic Multilingual Plane).

Шаблон Unicode соответствует строке (String), интерпретируемой как состоящая из кодовых точек Unicode, закодированных с использованием UTF-16.

В контексте описания поведения шаблона BMP «символ»(character) означает одну 16-битную кодовую точку Unicode BMP.

В контексте описания поведения шаблона Unicode «символ»(character) означает кодовую точку в кодировке UTF-16 (6.1.4).

В любом контексте «значение символа» (character value) означает числовое значение соответствующей некодированной кодовой точки.

 

Синтаксис и семантика шаблона Pattern определяется так, как если бы исходный код для Pattern был Списком значений SourceCharacter, где каждый SourceCharacter соответствует кодовой точке Unicode. Если шаблон BMP содержит не-BMP SourceCharacter, весь шаблон кодируется с использованием UTF-16, а отдельные единицы кода этой кодировки используются в качестве элементов Списка.

 

Примечание 2

Например, рассмотрите шаблон, выраженный в исходном тексте как один символ не-BMP U+1D11E (МУЗЫКАЛЬНЫЙ СИМВОЛ G CLEF). Интерпретируемый как шаблон Unicode, это будет Список одного элемента (символа), состоящий из единственной кодовой точки 0x1D11E. Однако, интерпретируемый как шаблон BMP, он сначала закодирован в UTF-16 для создания двухэлементного Списка, состоящего из кодовых единиц 0xD834 и 0xDD1E.

Шаблоны передаются в конструктор RegExp как строковые значения ECMAScript, в которых символы, отличные от BMP, имеют кодировку UTF-16. Например, односимвольный шаблон MUSICAL SYMBOL G CLEF, выраженный как строковое значение, представляет собой строку (String) длиной 2, элементами которой были кодовые единицы 0xD834 и 0xDD1E. Таким образом, для обработки её как шаблона BMP, состоящего из двух символов шаблона, не требуется дальнейшего перевода строки. Однако для обработки его как шаблона Unicode необходимо использовать UTF16SurrogatePairToCodePoint при создании Списка, единственным элементом которого является один символ шаблона, кодовая точка U+1D11E.

Реализация может фактически не выполнять такие преобразования в UTF-16 или из UTF-16, но семантика этой спецификации требует, чтобы результат сопоставления с образцом был таким, как если бы такие преобразования были выполнены.

 

 

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

Предыдущий раздел — Шаблоны

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

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