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

时间:2019-01-28 10:05:55

标签: javascript regex regex-group

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

我有一个可能为/action/action{key:value}的字符串 我正在尝试获取变量中的actionkeyvalue

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

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

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

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

/^\/(.*?)(\{(.*)\:(.*)\})?/它不再匹配任何内容。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

或使用否定字符集,但不包括{

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