2

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

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

4

3 回答 3

3

正如我在评论中所说,使用一个 JavaScript 正则表达式是不可能的。但是,您可以使用循环来做到这一点:用原子替换子表达式,重复直到得到一个原子。如果你不能再减少,并且剩下的不是原子,它就不会验证。这实际上与评估它的过程几乎相同(只是跳过了抽象语法树)。您可以搜索\(\d+\)|\d+[-+/*]\d+并替换为0

例子:

  • ((20+30)-25)/5
  • ((0)-25)/5
  • (0-25)/5
  • (0)/5
  • 0/5
  • 0
  • 完毕

如果你没有匹配并且没有 just 0,那就失败了。

(要评估而不是验证,您只需要用实际值替换而不是虚拟替代,其他一切都是一样的)。

于 2012-12-12T06:12:40.920 回答
2

JavaScript "eval" 函数是最好的验证器。尝试这样做:

eval("((20+30)-25)5");

你会得到足够详细的错误描述。

于 2015-03-05T13:27:04.207 回答
0

如果您对括号嵌套施加最大深度,您将只能使用正则表达式执行此操作。否则,这组算术表达式会形成上下文无关语言,而不是常规语言。

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

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

于 2012-12-12T06:14:12.587 回答