用于骰子滚动系统和使用javascript捕获的正则表达式
我正在尝试构建一个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 此外,您还可以使用括号
- 首先,请求的骰子必须包含字符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我已经尽我所能尝试按照您的要求做了,但我不知道这是否有帮助好的,我来看看。您是否也在尝试捕获部分?我正在尝试捕获骰子编号后的各个部分,骰子的数量和骰子边数自己谢谢你这么多这是完美的,正是我需要的。