我正在使用 math.js验证数学方程是否缺少右括号或重复运算符等,因此以下将被视为不正确的方程:
9 + ((5 * 6)//12
这很好用。然而,我想要做的是在等式中允许使用变量名,如下所示:
9 + (variableName * 6) / 12
变量名也应该相同。因此,验证器需要知道如果它在表达式中找到“variableName”就可以了。
我还想将允许的方程式运算符限制为以下:
()-+/*
我试图在文档中找到这些问题的答案,但没有成功。
有人知道这是如何在 math.js 中完成的吗?
最佳答案
您可以使用 math.js 将表达式解析为节点树:
var tree = math.parse('9 + (variableName * 6) / 12');
使用当前版本的 math.js,您可以使用函数 find
分析树(未记录,参见 explanation here)。下一个版本的 math.js 将以函数 traverse
和 transform
的形式提供更广泛(和记录)的支持,这使您可以轻松地遍历所有节点树并做点什么。
使用这些函数,您可以找到所有的 SymbolNodes 并检查它们是否被允许,找到所有的 OperatorNodes 并检查它们是否被允许。我为您创建了一个 jsbin 来演示如何分析已解析的表达式:
http://jsbin.com/duduru/1/edit?html,output
或者,您可以使用 PEG.js 生成您自己的解析器或 Jison .
编辑:最新版本的 math.js 现在正式支持对表达式树的操作,请参阅文档:http://mathjs.org/docs/expressions/expression_trees.html
关于javascript - math.js 中的变量名和限制运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26603795/