math.js中的变量名和限制运算符

Variable name and restrict operators in math.js

本文关键字:运算符 变量名 js math      更新时间:2023-09-26

我使用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分析树(未记录,请参阅此处的解释)。math.js的下一个版本将以函数traversetransform的形式提供更广泛(并有文档记录)的支持,这使您可以轻松地在树中的所有节点上循环并执行某些操作。

例如,使用这些函数,您可以查找所有SymbolNodes并检查它们是否被允许,还可以查找所有OperatorNodes并查看它们是否被许可。我为您创建了一个jsbin来演示如何分析解析的表达式:

http://jsbin.com/duduru/1/edit?html,输出

或者,您可以使用PEG.js或Jison生成自己的解析器。

编辑:最新版本的math.js现在正式支持对表达式树的操作,请参阅文档:http://mathjs.org/docs/expressions/expression_trees.html