我有一个算术表达式 ((20 + 30)-25)/ 5 我想通过使用正则表达式进行验证。表达式只能有整数,浮点数,操作数和括号。
如何生成正则表达式以验证请帮助或建议使用javascript验证该字符串的任何其他方法。
答案 0 :(得分:3)
正如我在评论中所说,使用一个JavaScript正则表达式是不可能的。但是,您可以使用循环来执行此操作:将子表达式替换为原子,重复直到获得原子。如果你不能再减少了,剩下的东西不是原子,它就不会验证。这实际上与评估它的过程非常相似(只是跳过抽象语法树)。您可以搜索\(\d+\)|\d+[-+/*]\d+
并替换为0
:
示例:
((20+30)-25)/5
((0)-25)/5
(0-25)/5
(0)/5
0/5
0
如果你没有匹配且没有0
,那就失败了。
(为了评估而不是验证,你只需要用实际值替换而不是虚拟替换,其他一切都是相同的。)
答案 1 :(得分:1)
JavaScript" eval"功能是最好的验证器。 尝试这样做:
eval("((20+30)-25)5");
您将获得足够详细的错误说明。
答案 2 :(得分:0)
如果对括号嵌套强加最大深度,则只能使用正则表达式执行此操作。否则,算术表达式集形成无上下文语言,但不形成常规语言。
如果我必须使用正则表达式,我将使用的方法是为您的算术表达式集编写常规语法,然后将其转换为正则表达式。
另一种方法是编写一个递归下降解析器,这是一个相当简单的项目,对算术表达式非常有效。