Regex с необязательными группами захвата - PullRequest
0 голосов
/ 28 января 2019

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

У меня есть строка, которая может быть /action или /action{key:value} Я пытаюсь получитьaction, key и value в переменных.

Я пробовал несколько регулярных выражений, которые являются вариациями этого: /^\/(.*?)(\{(.*)\:(.*)\})?/

/^\/(.*?)\{(.*)\:(.*)\}/ соответствует /action{key:value}, но не /action

/^\/(.*)(\{(.*)\:(.*)\})?/ (объявляя группу захвата необязательной) соответствует /action, но не /action{key:value} (захватывает все)

Так что, если я объявлю первую группу ленивой:

/^\/(.*?)(\{(.*)\:(.*)\})?/ она больше ничего не будет соответствовать.

Я знаю, что я близок кРешение, но я уверен, что недопонимание чего-то базового:)

1 Ответ

0 голосов
/ 28 января 2019

Поместите всю {...} часть в необязательную группу без захвата, оставив первую группу ленивой:

^\/(.*?)(?:{(.*)\:(.*)})?$
        ^^^             ^

https://regex101.com/r/S4DAy3/1

Или используйте набор отрицательных символов,исключая { с:

^\/([^{]+)(?:{(.*)\:(.*)})?$
...