我知道还有其他标题相同的问题,但我在其中找不到答案。
我有一个可能为/action
或/action{key:value}
的字符串
我正在尝试获取变量中的action
,key
和value
。
我尝试了几种正则表达式,它们是该正则表达式的变体:
/^\/(.*?)(\{(.*)\:(.*)\})?/
/^\/(.*?)\{(.*)\:(.*)\}/
匹配/action{key:value}
但不匹配/action
/^\/(.*)(\{(.*)\:(.*)\})?/
(将捕获组声明为可选)与/action
匹配,但与/action{key:value}
不匹配(捕获所有内容)
因此,如果我将第一个组声明为惰性组:
/^\/(.*?)(\{(.*)\:(.*)\})?/
它不再匹配任何内容。
我知道我已经接近解决方案了,但是我肯定会误解一些基本的问题:)
答案 0 :(得分:1)
将整个{...}
部分放在一个可选的非捕获组中,同时让第一个组保持惰性:
^\/(.*?)(?:{(.*)\:(.*)})?$
^^^ ^
https://regex101.com/r/S4DAy3/1
或使用否定字符集,但不包括{
:
^\/([^{]+)(?:{(.*)\:(.*)})?$