Почему не работает регулярное выражение /[–-А]/?

Я писал регулярное выражение, которое находит в строке символ, который является: длинным тире (–), обычным тире (-), или буквой 'А'.

Получился RegExp: /[–-А]/, но при его создании вылезает ошибка:

Uncaught SyntaxError: Invalid regular expression: /[–-А]/: Range out of order in character class

Если поменять тире местами - /[-–А]/, то выражение создаcтся без ошибок и будет корректно работать.

Подскажите пожалуйста, почему так получается? Почему /[–-А]/ даёт синтаксическую ошибку, а /[-–А]/ нормально работает?


Ответы (1 шт):

Автор решения: Alex R.

Символ - (минус) в регулярных выражениях имеет специальное значение.

В первом случае он воспринимается как обычный символ, т.к. стоит первым, и выражение /[-–А]/ означает искать один из трех символов.

Во втором выражении /[–-А]/ он означает диапазон значений, т.к. стоит вторым, и это значит - искать все символы от до А, что некорректно, т.к. больше А.

То есть, для второго случая его надо экранировать так: /[–\-А]/.

→ Ссылка