Попытка написать регулярное выражение, которое соответствует заданной строке и разбивает ее на группы - PullRequest
1 голос
/ 02 марта 2020

Я хочу написать регулярное выражение, которое извлекает эти данные из заданной строки

Группа 1: действие (является постоянным и должно соответствовать «/ search»)

Группа 2: команда

Группа 3: запрос

Группа 4: жанр (возможно, с или без «-»)

Условие 1:

Matches “/search music heal the world -pop” or “/search movies avengers -action” into four (4) groups.

Group 1 | Group 2 | Group 3        | Group 4
--------------------------------------------
/search | music   | heal the world | pop
/search | movies  | avengers       | action

Условие 2 :

Matches “/search music heal the world” or “/search movies avengers” into three (3) groups.

Group 1 | Group 2 | Group 3
------------------------------
/search | music   | heal the world
/search | movies  | avengers      

Условие 3:

Matches “/search music” or “/search movies” into two (2) groups.

Group 1 | Group 2
----------------
/search | music  
/search | movies   

Условие 4:

Matches “/search” into a group.

Group 1
--------
/search   

Я все еще новичок ie, когда дело доходит до выражения и получаю это сделано доставило мне некоторые неприятности. Я придумал это (\/search)\s([^\s]+)\s(.+)\s(.+), но оно соответствует только /search music heal the world pop или /search movies avengers action и разбивает их на четыре (4) группы, но не соответствует другим условиям.

1 Ответ

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

Я использовал именованные и не захватывающие группы для более ясного результата

^(?<Action>\/search)(?:\s+(?<Command>\w+)(?:\s+(?<Query>(?:\w|\s)+))?)?(?:\s+-(?<Genre>\w+))?$

https://regex101.com/r/HL05pu/2

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