我正在尝试解析一个数学表达式,以便使用 .eval
对其求值。
我编码:
function evaluarExpresion (fx, x) {
fx = fx.replace("x", x)
fx = fx.replace("e", "Math.E")
fx = fx.replace("sin", "Math.sin")
fx = fx.replace("tan", "Math.tan")
fx = fx.replace("cos", "Math.cos")
fx = fx.replace("pi", "Math.PI")
fx = fx.replace("**", "^")
return eval(fx)
}
但是,当使用 (1^3)/(1+x**(1/2))
调用时,它将失败,因为仅替换语句将 fx
字符串转换为:
'(1^3)/(1+x**(1/2))'
所以 eval
语句抛出:
Uncaught SyntaxError: Unexpected token *
我该如何解决这个问题,或者什么是对这些表达式(三 Angular 函数、sqrt、e、pi 等)进行数值评估的最佳替代方案(任何库)?
最佳答案
您必须将搜索字符串更改为模式才能使用 g(全局搜索)选项:
function evaluarExpresion (fx, x) {
fx = fx.replace(/x/g, x)
fx = fx.replace(/e/g, "Math.E")
fx = fx.replace(/sin/g, "Math.sin")
fx = fx.replace(/tan/g, "Math.tan")
fx = fx.replace(/cos/g, "Math.cos")
fx = fx.replace(/pi/g, "Math.PI")
fx = fx.replace(/\*\*/g, "^")
return eval(fx)
}
console.log(evaluarExpresion('(1**3)/(1+x**(1/2))' , 9));
关于javascript - 替换数学表达式字符串以使用 Javascript 进行评估不会替换所有 ** 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23371939/