用于骰子滚动系统和使用 javascript 捕获的正则表达式

REGEX for dice rolling system and capturing using javascript

我正在尝试构建一个 javascript 掷骰子系统,它可以从文本框中以字符串的形式捕获掷骰子请求的不同部分。为此需要几个关键部分,它们在下面的列表中:

我什至不知道这是否可行,因为我不太了解正则表达式。我取得了一些进展,但是,我遇到了最后一点障碍。 我不需要它来实际进行计算,我只需要它来将所有内容分成几组并验证字符串是否符合规则。 这是我目前所拥有的:

/([\d]*?)([dD][\d]*)(([\+\-\*])[\d]|([\+\-\*])\(([a-zA-Z]*)\))?/gmi

编辑: 按照@sln

的要求重写我需要的内容

我正在寻找可以制作可与这样的字符串一起使用的正则表达式的东西:

10D6([+-*/](number|\(userInput\)|D6))

因此用户可以要求他们掷 10 个 D6 骰子并添加用户输入的预定义数字或掷骰子。然而,10 不是必需的,也不是 D6 之后的所有内容,但是,D6 之后的所有内容都需要一个数学符号和它后面的三个东西之一。 D6之后的组可以做无限次。 D6也可以是你喜欢的任意边

最后,我创建了一个 regex101,其中包含我需要使用的不同字符串的列表。 https://regex101.com/r/VJdgmw/2

好的,我已经根据我的理解把它精简了。
JS demo

/(\d*)(D\d*)((?:[+*-](?:\d+|\([A-Z]*\)))*)(?:\+(D\d*))?/i

Formatted/解释

 ( \d* )                       # (1)
 ( D \d* )                     # (2), Dice 1, required
 (                             # (3 start), modifiers
      (?:                           # Cluster
           [+*-]                         # + or - or *
           (?: \d+ | \( [A-Z]* \) )      # either digits, or (name)
      )*                            # End cluster, 0 to many times
 )                             # (3 end)
 (?:
      \+                            # +
      ( D \d* )                     # (4), Dice 2, optional
 )?

中间部分(?:[+*-](?:\d+|\([A-Z]*\)))*是重复的,所以
单个无法捕获。
但是,整个中间部分都包含在第 3 组中,以防您想进一步处理它的内容。