Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于骰子滚动系统和使用javascript捕获的正则表达式_Javascript_Regex_Regex Group - Fatal编程技术网

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

用于骰子滚动系统和使用javascript捕获的正则表达式,javascript,regex,regex-group,Javascript,Regex,Regex Group,我正在尝试构建一个javascript掷骰子系统,它可以从文本框中以字符串的形式捕获掷骰子请求的不同部分。这方面需要的关键部件很少,如下表所示: 首先,请求的骰子必须包含字符d或d,后跟任意长度的整数,例如:D10或d2或D1203,而不是q1 第二,您可以申请该卷的任何编号,例如:10D2或20D2,但不需要D或D之前的编号 第三,这个数字可以通过加减或乘以一个不同的数字来修改,例如:D10+10或D10*20 另外,你可以通过1个骰子来修改这个数字,比如D10+D2 此外,您还可以使用括号

我正在尝试构建一个javascript掷骰子系统,它可以从文本框中以字符串的形式捕获掷骰子请求的不同部分。这方面需要的关键部件很少,如下表所示:

  • 首先,请求的骰子必须包含字符d或d,后跟任意长度的整数,例如:D10或d2或D1203,而不是q1
  • 第二,您可以申请该卷的任何编号,例如:10D2或20D2,但不需要D或D之前的编号
  • 第三,这个数字可以通过加减或乘以一个不同的数字来修改,例如:D10+10或D10*20
  • 另外,你可以通过1个骰子来修改这个数字,比如D10+D2
  • 此外,您还可以使用括号中的文本字符串(例如:D10+(强度))使用用户请求的数字修改骰子卷
  • 最后,如果出于某种原因需要,最后3点可以执行无限次,例如:1D10*10+2
我甚至不知道这是否可能,因为我对正则表达式不太了解。我已经取得了一些进展,但是,我在最后一点上遇到了障碍。 我不需要它来实际进行计算,我只需要它将所有内容分成组,并验证字符串是否符合规则。 这就是我到目前为止所做的:

/([\d]*?)([dD][\d]*)(([\+\-\*])[\d]|([\+\-\*])\(([a-zA-Z]*)\))?/gmi
编辑: 按照@sln的要求重写我需要的内容

我正在寻找一种可以制作正则表达式的东西,它可以处理如下字符串:

10D6([+-*/](number|\(userInput\)|D6))
因此,用户可以要求他们掷10个D6骰子,并将预定义的数字添加到用户输入或掷骰子中。然而,10不是必需的,D6之后的所有内容也不是必需的,然而,D6之后的所有内容都需要一个数学符号和它后面的三个内容之一。组后的D6可以做无数次。D6也可以是任意数量的侧面


最后,我创建了一个regex101,它有一个不同字符串的列表,我需要它来处理这些字符串

好的,根据我的理解,我已经把它细化了。

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

/解释

 ( \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组中捕获,以便您进一步处理其内容

如果能仔细看看你的正则表达式就好了。然而,在你的描述中有太多含糊不清的地方,没有什么可以联系到它。成功的正则表达式的关键是严格定义需求。将描述重写为包含所有零件的一个实体。将所有选项放在括号中:
D5[[+/*10 |(用户)],[+D5]]]
就像您在解释命令行选项一样。@sln我已经尽我所能尝试按照您的要求做了,但我不知道这是否有帮助好的,我来看看。您是否也在尝试捕获部分?我正在尝试捕获骰子编号后的各个部分,骰子的数量和骰子边数自己谢谢你这么多这是完美的,正是我需要的。