带有可选组的正则表达式不起作用 - \d 在括号中不起作用 (\d*%)

Regex with optional groups not working - \d is not working in the parenthesis (\d*%)

我需要为以下规则编写正则表达式,其中按钮 (a、b、开始) 是唯一必需的字段,所有其他组都是可选的但有问题。还需要一些后视逻辑,我也遇到了问题

示例:

我的正则表达式:

^(a|b|start)(\d*%)?(\d*(s|ms))?

这里是测试台https://regex101.com/r/jGf0VR/3

问题

由于以下问题,正则表达式对我不起作用

  1. (\d*%)? - 这个组不工作,假设捕获 500%、200% 但它不工作(是的,用反斜杠尝试它仍然不起作用)。事实上它应该是可选的但它永远不会被视为可选

  2. a200ms300s - 应该被捕获但没有被捕获,同样a200s300ms也应该被捕获

  3. a200ms200% - 应该是无效的,我似乎无法解决这个问题,主要是因为 (\d*%)? 对我不起作用,如 prob1[=17= 中突出显示的那样]

使用以下匹配包含单个按钮按下的字符串:

^(a|b|start)(\d+%)?(\d+(s|ms))?$

我把\d*改成了\d+,表示在%s|ms之前至少需要一位数字。我在最后添加了 $ ,所以如果匹配后有额外的东西,它就不会匹配。

要匹配它们的序列,请围绕除锚点之外的所有内容放置一个组,并允许它重复。

^((a|b|start)(\d+%)?(\d+(s|ms))?)+$

DEMO