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

标签 javascript jquery math

我正在使用 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 将以函数 traversetransform 的形式提供更广泛(和记录)的支持,这使您可以轻松地遍历所有节点树并做点什么。

使用这些函数,您可以找到所有的 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/

相关文章:

python - 用 python 编写的数学语法检查器

java - 如何从输入生成随机值?

javascript - 如何初始化对象数组

javascript - Vue 警告 : Failed to resolve component

javascript - 使用 lazysizes 延迟加载背景图像

javascript - 使用 jQuery 获取元素的实际宽度

algorithm - 如何生成给定集合的幂集?

javascript - 仅对背景位置 X 轴进行动画处理

javascript - TypeError : Object function (req, res, next) { app.handle(req, res, next); } 没有方法 'configure'

javascript - 尝试加载本地 json 文件,但无法在外部范围中读取它