Typescript не может анализировать именованные группы в регулярных выражениях

61
6

У меня есть строка кода

regex = /^(?<aa>[0-9]{2})-(?<bb>[0-9]{6})-(?<cc>[0-9]{6})-(?<d>[0-9])$/;

И машинопись (или это веб-пакет?) Жалуется:

Module parse failed: Error parsing regular expression: Invalid regular expression: /^(?<aa>[0-9]{2})-(?<bb>[0-9]{6})-(?<cc>[0-9]{6})-(?<d>[0-9])$/: Invalid group (18:23)
You may need an appropriate loader to handle this file type.

Кажется, проблема с именованными группами. Это действительное регулярное выражение в JavaScript.

Я использую машинопись 2.9.2

Я настоятельно предпочитаю использовать именованные группы. Что я могу сделать, чтобы они скомпилировались?

спросил(а) 2019-01-29T13:31:00+03:00 2 года, 1 месяц назад
1
Решение
85

Это на самом деле не является допустимым регулярным выражением в JavaScript согласно https://regexr.com/. И Firefox и Edge.

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

См. Http://kangax.github.io/compat-table/es2016plus/ для совместимости.

Компилятор Typescript - это не тот, кто выдает ошибку, это ваш загрузчик модуля webpack. Я попытался бы установить цель на ES2018 и посмотреть, работает ли это.

В качестве альтернативы см. Ответ о деструктуризации массива в именованных группах захвата в регулярном выражении JavaScript? ,

ответил(а) 2019-01-29T18:19:00+03:00 2 года, 1 месяц назад
43

Попробуй это:

regex= "/^(?<aa>[0-9]{2})-(?<bb>[0-9]{6})-(?<cc>[0-9]{6})-(?<d>[0-9])$/";

Вы также можете проверить свой RegEx на regex101.com.

ответил(а) 2019-01-29T13:36:00+03:00 2 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема