Spec-Zone.ru › JavaScript

SyntaxError: escape-символ класса символов не может быть использован в диапазоне класса в регулярном выражении

Исключение JavaScript "escape-символ класса символов не может быть использован в диапазоне класса в регулярном выражении" возникает, когда регулярное выражение, чувствительное к Unicode, содержит класс символов, где граница диапазона символов является другим классом символов, таким как escape-символ класса символов.

Сообщение

SyntaxError: Invalid regular expression: /[\s-1]/u: Invalid character class (V8-based)
SyntaxError: character class escape cannot be used in class range in regular expression (Firefox)
SyntaxError: Invalid regular expression: invalid range in character class for Unicode pattern (Safari)

Тип ошибки

SyntaxError

Что пошло не так?

Класс символов может указывать диапазон символов, используя дефис (-) между двумя символами. Например, [a-z] соответствует любой строчной букве от a до z. Обе границы диапазона должны представлять собой одиночные символы, чтобы диапазон имел смысл. Если одна из границ фактически представляет собой несколько символов, возникает ошибка. В классах символов не в режиме v внутри классов символов разрешены только escape-последовательности классов символов; в классах символов в режиме v это также может произойти, если одна из границ является другим классом символов [...].

В режиме, нечувствительном к Unicode, этот синтаксис приводит к тому, что - становится литеральным символом вместо возникновения ошибки, но это устаревший синтаксис, и на него не следует полагаться.

Примеры

Недопустимые случаи

/[\s-_]/u; // \s is a character class escape for whitespace
/[A-\D]/u; // \D is a character class escape for non-digits
/[\p{L}-\p{N}]/u; // \p{L} is a character class escape for Unicode letters
/[[A-z]-_]/v; // In unicodeSets mode, character classes can be nested

Допустимые случаи

// Put the hyphen at the start of the character class,
// so it matches the literal character
/[-\s_]/u;
// Escape the hyphen so it also matches the literal character
/[\s\-_]/u;
// Remove the backslash so the bound is a literal character
/[A-D]/u;
// Remove the hyphen so the two bounds represent two alternatives
/[\p{L}\p{N}]/u;
// Use -- in unicodeSets mode, which represents set subtraction
/[[A-z]--_]/v;

См. также

  • Регулярные выражения
  • Класс символов: [...], [^...]

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Regex_character_class_escape_in_class_range

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API