此 REGEX 表达式的正确语法是什么?

What would the correct syntax be for this REGEX expression?

我有以下 REGEX 代码,即:

/^IT [0-9]{1,5}/(?<y1>19)?(?(y1)\d{2}|20\d{2})\((?<n1>M)?(?(n1)N|[H|B|C|D|E|G|K|M|U|N|L|S|T|V])\)$/

它旨在检查一组单词并确保其计算结果为:

IT 1/2014(G)

或最多 5 位数字的任何值

IT 5000/2014(MN)

当我在 firefox 中 运行 以上时,我不断收到以下错误:

Uncaught SyntaxError: invalid regexp group

如有任何帮助,我们将不胜感激。

该模式包含不受支持的 if 子句。

(?<y1>19)?(?(y1)\d{2}|20\d{2})

如果组 y1 存在,则匹配第 19 位和第 2 位数字,否则匹配 20 位和第 2 位数字。

可以写成(?:19|20)\d{2}

同样适用于

(?<n1>M)?(?(n1)N|[H|B|C|D|E|G|K|M|U|N|L|S|T|V])

如果组 n1 存在,则匹配 MN 否则匹配字符 class 中列出的其中一个。

可以写成(?:MN|[HB-EGKMUNLSTV])


整个模式可能如下所示:

 ^IT [0-9]{1,5}\/(?:19|20)\d{2}\((?:MN|[HB-EGKMUNLSTV])\)

Regex demo