Регулярное выражение JavaScript игнорирует исключение регистра (недопустимая группа)

1

У меня есть следующее регулярное выражение:

(?i:(?:(?:(?:fbx|fo))\d+)|(?:(09|0[1-5])\s?(?:\d{2}\s?){4})(?:(@freeadsl)?))

Я тестировал выражение в https://regex101.com/, и он работает.

Изображение 174551

Но в javascript он не работает. Изображение 174551

После выполнения поиска выяснилось, что проблема в том, что javascript не принимает событие regex ignore ?i

Какое лучшее решение для устранения этой проблемы. Любая помощь, я буду признателен, спасибо!

Теги:
exception

1 ответ

1
Лучший ответ

JavaScript regex engine не поддерживает встроенные группы модификаторов. Вы можете использовать модификатор i в регулярном выражении JS и удалить ненужные группы без захвата, чтобы уменьшить ваше регулярное выражение до

var rx = /(?:fbx|fo)\d+|(?:09|0[1-5])\s?(?:\d{2}\s?){4}(?:@freeadsl)?/i;
                                                                      ^

См. Демо-версию regex. /i в конце делает буквы в шаблоне совпадающими как с lower-, так и с прописными буквами.

Детали:

  • (?:fbx|fo)\d+ - fbx или fo substring, за которыми следуют цифры 1+
  • | - или же
  • (?:09|0[1-5]) - 09 подстрока или 0 за которой следует от 1 до 5 цифр.
  • \s? - необязательные (1 или 0) пробелы
  • (?:\d{2}\s?){4} - 4 вхождения:
    • \d{2} - 2 цифры
    • \s? - необязательные (1 или 0) пробелы
  • (?:@freeadsl)? - необязательная подстрока @freeadsl.
  • 0
    Хороший вызов, убери это. Гораздо более читабельно сейчас;)
  • 1
    Спасибо за ваш ответ @Wiktor. Просто для информации, я получаю регулярное выражение от Backend, я не могу его изменить, но я вижу, что ваше регулярное выражение лучше, я собираюсь поговорить об этом с backend developper. Спасибо за помощь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню