Javascript регулярное выражение: повторяющаяся группа без захвата - PullRequest
0 голосов
/ 25 марта 2020

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

Строки, 2 примера:

- /download?standard=yes&file=France_new-aquitaine_deux-sevres_europe_2.obf.zip

- /download?standard=yes&file=Afghanistan_asia_2.obf.zip

Я хочу извлечь следующие части:

- country (France)  
- region (new-aquitaine)  
- department (deux-sèvres)  
- worldZone (europe)  

Мое регулярное выражение WIP:
/.*file=(?:(.*?)_{1})*?(?:\d\.obf\.zip)$/gi

Может быть, есть рекурсивный способ справиться с этим, я не знаю.

Вы можете помочь или направить меня? Спасибо.

Решено с помощью:

/.*file=([^_]+)_(?:([^_]+)_)??(?:([^_]+)_)??([^_]+)_2\.obf\.zip$/g

1 Ответ

2 голосов
/ 25 марта 2020

Одним из вариантов может быть использование групп захвата, и если вы хотите сопоставить страну и регион для второй строки, вы можете сделать эту часть необязательной, используя необязательную группу без захвата (?:...)?

части разделены подчеркиванием. Вы можете использовать отрицательный класс символов ([^_]+), соответствующий любому символу, кроме символа подчеркивания, чтобы захватить промежуточные части.

.*file=([^_]+)_([^_]+)(?:_([^_]+)_([^_]+))?_\d+\.obf\.zip$

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...