哪个正则表达式可以匹配这些值?

Which regex could match those values?

我正在开发新的特定语法。其中有两种代码:

I: = or + or - (一个或几个连续的加号、减号或等号);

正则表达式为 /[+=-]+/

II: 6:+ or 15:- or 999:= (任意整数,后跟一个加号、减号或等号);

正则表达式是 /\d+:[+=-]/

在一个条目中可能有任何数量的任何这些令牌。
每个新条目都必须用方括号括起来:[<i>代码在这里</i>].
括号中的代码种类可以并排排列:[=6:+-][15:-++=3:+]
不允许输入空条目。

所以,我无法制作正则表达式来匹配正确的条目!
我试过这个 /\[([=+-]*(\d+:[=+-])?[=+-]*)\]/,但它也匹配 [],虽然它是 еггог。


匹配 任何一个

[=]     [---]       [+=-]       [=+-]       [17:=]      [==+-]      [6:=-]      [+5:=-]

[==-=+] [+=====-]  [15:-++=3:+] [=======]   [+=-+==-]   [---==--]   [==-=+==]   [=--==--]

不匹配

[]  [=:1]   [:2+]   [3-:]

我不知道正则表达式的风格是什么,但这应该适用于几乎所有的人:

\[((?:[+=-]+|[+=-]?\d+:[+=-]+)+)\]

Debuggex Demo

它使用了 | 或操作数,因此它要么捕获一种匹配(-+= 符号的集合或带冒号的数字等)

另外,好像是因为你要[+5:=-]匹配,所以我加了一个[+-]?来匹配。

编辑: 这允许多次出现该语言。然而,这可能是微不足道的,因为没有什么可以区分代码的不同部分。

天哪,方式更简单:

\[(?:(?:\d+:)?[+=-])+\]

我不敢相信我是如此愚蠢。