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