具有可选捕获组的正则表达式

MrV*_*doo 1 javascript regex regex-group

我知道还有其他具有相同标题的问题,但我无法在其中找到答案。

我有一个字符串,可能是/action或者/action{key:value} 我正在尝试获取action,keyvalue变量。

我尝试过几种正则表达式,它们是此正则表达式的变体: /^\/(.*?)(\{(.*)\:(.*)\})?/

/^\/(.*?)\{(.*)\:(.*)\}/ 匹配/action{key:value}但不匹配/action

/^\/(.*)(\{(.*)\:(.*)\})?/(将捕获组声明为可选)匹配/action但不匹配/action{key:value}(它捕获所有内容)

因此,如果我将第一组声明为惰性组:

/^\/(.*?)(\{(.*)\:(.*)\})?/它不再匹配任何东西了。

我知道我已经接近解决方案,但我肯定误解了一些基本的东西:)

Cer*_*nce 6

将整个{...}部分放入可选的非捕获组中,同时保持第一组惰性:

^\/(.*?)(?:{(.*)\:(.*)})?$
        ^^^             ^
Run Code Online (Sandbox Code Playgroud)

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

或者使用负字符集,不包括{s:

^\/([^{]+)(?:{(.*)\:(.*)})?$
Run Code Online (Sandbox Code Playgroud)