我正在用Java编写一个数学应用程序,它使用Javascript编写脚本/输入。我希望能够输入x^2,并让Java在发送到JavaScript解析器之前将其替换为pow(x,2)。如何进行这种类型的替换?在一个代码片段中可能有多个不同的这样的表达式,可能是一行或多行。
发布于 2014-11-22 14:07:45
您应该派生esprima解析器以添加具有适当优先级的^运算符等。然后遍历解析树,确定使用它的位置,并进行词法替换。这个链接可能很有用: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问题:Safe evaluation of arithmetic expressions in Javascript
发布于 2014-11-22 13:58:31
更新:
我不确定您期望的复杂度有多大,但是如果您希望它能够处理一些棘手的表达式,那么您最好使用解析器库。
假设您正在讨论javascript,并且您正在替换字符串输入,请执行以下操作。
"x^2".replace(/(.*)\^(\d+)/, "pow($1, $2)")发布于 2014-11-22 14:01:51
更新尝试::在某些情况下是可能的
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])'); // -7https://stackoverflow.com/questions/27074529
复制相似问题