首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将var^power替换为power(var,power)

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

Stack Overflow用户
提问于 2014-11-22 13:52:36
回答 3查看 585关注 0票数 0

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

EN

回答 3

Stack Overflow用户

发布于 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

票数 3
EN

Stack Overflow用户

发布于 2014-11-22 13:58:31

更新:

我不确定您期望的复杂度有多大,但是如果您希望它能够处理一些棘手的表达式,那么您最好使用解析器库。

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

代码语言:javascript
复制
"x^2".replace(/(.*)\^(\d+)/, "pow($1, $2)")
票数 1
EN

Stack Overflow用户

发布于 2014-11-22 14:01:51

更新尝试::在某些情况下是可能的

代码语言:javascript
复制
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/

示例和输出

代码语言:javascript
复制
// 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27074529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档