用于解析正则表达式字符串的正则表达式

A regex to parse regex string

我需要用正则表达式解析正则表达式。我有一个正则表达式字符串:

[a-z]{1}[-][0-9]{4}[-][ab]

我想出的解析上述字符串的实际正则表达式几乎有效是:

/(?|\[(.*?)\]\{(.*?)\}|\[(.*?)\](.*?))/g

可以在这个 regex101 example 中看到它的作用,这里的错误在 Match 2 及其 Group 1-][0-9,应该只是 -)。


目标是匹配方括号 [] 内的所有内容,后跟大括号 {} 内的数字。如果方括号 [] 之后的大括号 {} 丢失,则应该用 null 填充它,这就是替代组对分支重置组所做的。此外,如果只是方括号后跟一个方括号,那么它也应该在以后起作用(匹配方括号 [] 内部的内容并用 Group 2 填充 null).

我的正则表达式不会在第三个 [-] 处停止并将其匹配到 -][0-9 而不是仅匹配 - 然后从解析 [0-9]{4} 开始的问题。

预期匹配应该是:

[a-z]{1}
a-z
1

[-]
-
null

[0-9]{4}
0-9
4

[-]
-
null

[ab]
ab
null

当前匹配不正确,如下:

[a-z]{1}
a-z
1

[-][0-9]{4}
-][0-9
4

[-]
-
null

[ab]
ab
null

我错过了什么?

这个正则表达式应该可以工作:

\[([^]]*)](\{\d+\}|)

Demo

解释:

  • \[ - 匹配 [
  • ([^]]*) - 匹配出现次数超过 0 次的任何非 ] 字符,并在第 1 组
  • 中捕获此子匹配项
  • ] - 匹配 ]
  • (\{\d+\}|) - 要么不匹配任何内容,要么 { 后跟 1+ 位数字后跟 }。匹配的内容存储在第 2 组