如何使用基本运算符检查字符串中的数学表达式

How to check string for mathematical expression with basic operators?

本文关键字:表达式 字符串 检查 何使用 运算符      更新时间:2023-09-26

如何检查包含基本数学运算符+-/*和包含字母数字字符的变量的字符串中的语法。此字符串也可以包含方括号((。重要的是要知道它是否完整,这意味着要关闭括号或没有冗余运算符。

例如(1*3(3+2)+test)有效,但((1++2)不是。

这在使用regex的Javascript中可能吗?或者我必须制定一个算法吗?如果是的话,有人对此有类似的算法吗?

正则表达式本身不具备解析这类表达式的能力,因为您需要某种堆栈来检查以前匹配的内容。

您需要创建一个简单的解析器来遍历字符串并检查以下内容:

  1. 如果找到数字/文本,请继续
  2. 如果你找到一个开口支架,把它推到堆叠处
  3. 如果找到一个闭合括号,请从堆栈中弹出一个括号(如步骤2所述(。如果缺少左括号,这将导致尝试从空堆栈中弹出,这将引发错误
  4. 如果找到运算符,请确保下一个字符是左括号或其他数字/文本。这将有助于在两个运算符相互跟随或字符串以运算符结尾的情况下中断

解析器完成后,检查用于跟踪括号的堆栈是否为空。如果它不为空,则表示括号的数量不平衡。