我正在用Java编写一个使用Javascript进行脚本/输入的数学应用程序。
我希望能够输入x^2
并让Java在发送到JavaScript解析器之前将其替换为pow(x,2)
。我该怎么做这种替换?在一个代码片段中可能有多个不同的此类表达式,可能是一行或多行。
答案 0 :(得分:3)
你应该使用esprima JS解析器来添加具有适当优先级的^
运算符等。然后遍历解析树,识别它的使用位置,并进行词法替换。此链接可能有用:http://ariya.ofilabs.com/2011/08/math-evaluator-in-javascript-part-2.html。不太确定你将如何从Java程序中调用它,但我相信你可以解决这个问题。
或者,http://mathjs.org/中的解析器显然已经支持^
,因此您可以使用它。或者,http://silentmatt.com/javascript-expression-evaluator/似乎也支持^
。或者http://jsep.from.so/,“一个很小的JavaScript表达式解析器”。
相关问题:Safe evaluation of arithmetic expressions in Javascript
答案 1 :(得分:0)
更新:
我不确定您期望的复杂程度,但如果您希望它能够处理一些棘手的表达,那么您也可以使用解析器库。
假设您正在谈论javascript并且您正在替换字符串输入,请执行以下操作。
"x^2".replace(/(.*)\^(\d+)/, "pow($1, $2)")
答案 2 :(得分:0)
试试这个: 更新:有些情况可能
var re = /(?![\+\-\*\/\(\)\^\s])([a-zA-Z0-9]+)\^([a-zA-Z0-9]+)/gm;
var str = 'w*x^2 +5^9';
var subst = 'pow($1,$2)';
var result = str.replace(re, subst);
更好的数学计算参考。http://mathjs.org/
示例&输出强>
// expressions
math.eval('1.2 * (2 + 4.5)'); // 7.8
math.eval('5.08 cm to inch'); // 2 inch
math.eval('sin(45 deg) ^ 2'); // 0.5
math.eval('9 / 3 + 2i'); // 3 + 2i
math.eval('det([-1, 2; 3, 1])'); // -7