我正在制作一个接受表达式的骰子滚轮,以便处理用户要求的滚动。
表达式CAN采用这种形式(最长):2d8(*2)(+20)[reroll=1]
。
我想做的是一个正则表达式,它将检查表达式是否结构良好,我已经做过:
/^(\d+d\d+(\([\*]\d+\))?(\([\+]\d+\))?(\[reroll(>|=|<)\d+\])?[\+$]){1,}/
问题是,我希望该正则表达式也匹配一个将括号/括号部分混合的表达式。 以下是我希望正则表达式匹配的表达式,同时保持表达式的每个部分兼容(除了2d8部分)。
2d8(+20)(*2)[reroll=1]
2d8(*2)(+20)[reroll=1]
2d8(+20)[reroll=1](*2)
2d8(*2)[reroll=1](+20)
有没有办法做我想做的事情而不需要做太多重复的正则表达式。
感谢您的回答。
答案 0 :(得分:2)
由于roll的语法相当复杂,为什么不编写解析器而不是使用庞大的正则表达式呢?