javascript用于验证算术表达式的正则表达式

时间:2012-12-12 06:03:03

标签: javascript

我有一个算术表达式 ((20 + 30)-25)/ 5  我想通过使用正则表达式进行验证。表达式只能有整数,浮点数,操作数和括号。

如何生成正则表达式以验证请帮助或建议使用javascript验证该字符串的任何其他方法。

3 个答案:

答案 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)

如果对括号嵌套强加最大深度,则只能使用正则表达式执行此操作。否则,算术表达式集形成无上下文语言,但不形成常规语言。

如果我必须使用正则表达式,我将使用的方法是为您的算术表达式集编写常规语法,然后将其转换为正则表达式。

另一种方法是编写一个递归下降解析器,这是一个相当简单的项目,对算术表达式非常有效。