javascript - 替换数学表达式字符串以使用 Javascript 进行评估不会替换所有 ** 实例

标签 javascript regex parsing eval

我正在尝试解析一个数学表达式,以便使用 .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/

相关文章:

javascript - JSF 验证 onblur 导致下一个字段聚焦并失效?

javascript - 数据表 - 设置列宽

javascript - 如何从 HTML5 中的视频中提取音频?

Javascript 字符串拆分

Javascript:将文本文件读入数组,按正则表达式拆分

regex - 将每行的空格替换为该行的第一个字符

javascript - 使用 d3.js 的 Sankey 图 - 将信息添加到链接标题

linux - 如何更正浮点值范围?

java - 使用正则表达式提取两个标签之间的文本

android - Json 标签用 gson 返回 null