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

标签 javascript regex math

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

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

在使用正则表达式的 Javascript 中这可能吗?或者我是否必须制定一个算法,如果是这样,有人有类似的算法吗?

最佳答案

正则表达式本身无法解析这些类型的表达式,因为您需要某种堆栈来检查之前匹配的内容。

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

  1. 如果找到号码/文本,请继续。
  2. 如果找到左括号,将其插入堆栈。
  3. 如果找到右括号,则从堆栈中弹出一个括号(如第 2 步所述)。如果您缺少左括号,这将导致尝试从空堆栈中弹出,这会引发错误。
  4. 如果找到运算符,请确保下一个字符是左括号或其他数字/文本。这应该有助于在您有两个运算符相互跟随或字符串以运算符结尾的情况下中断。

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

关于javascript - 如何使用基本运算符检查字符串的数学表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32207272/

相关文章:

javascript - 在谷歌脚本之间共享代码

javascript - 如何手动检查 chrome.storage 的值

javascript - JS 使用变量替换所有出现的字符串

regex - 使用正则表达式过滤的 JsonPath 表达式

java - 如何防止正则表达式转换 bbcode 超链接?

javascript - 如何在 JavaScript 中从字符串中提取数字?

math - 如何确定我的卷积是否可分离?

javascript - Node glob 中的方括号出现问题

c++ - N 个区间的 bool 规则 (C)

python - 用于除法时, '/' 和 '//' 有什么区别?