将 var^power 替换为 pow(var,power)

Replace var^power with pow(var,power)

本文关键字:power var pow 替换      更新时间:2023-09-26

我正在用Java编写一个数学应用程序,该应用程序使用Javascript进行脚本编写/输入。我希望能够输入,比如说,x^2,并在发送到JavaScript解析器之前让Java用pow(x,2)替换它。 如何进行此类更换? 一个代码段中可能有多个不同的此类表达式,可能是一行或多行。

您应该分叉 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表达式解析器"。

相关SO问题:Javascript中算术表达式的安全计算

更新:

我不确定你期望的复杂程度,但如果你想让它能够处理一些棘手的表达式,你不妨使用解析器库。


假设您正在谈论 javascript 并且正在替换字符串输入,请执行以下操作。

"x^2".replace(/(.*)'^('d+)/, "pow($1, $2)")

试试这个: 更新:在某些情况下可能是

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