用pow替换var ^ power(var,power)

时间:2014-11-22 05:52:36

标签: java javascript regex string

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

3 个答案:

答案 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);

live demo

更好的数学计算参考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