用Java脚本替换数学表达式字符串进行求值获胜't替换所有**事件
Replacing math expression String for evaluating with Java Script won't replace all ** incidences
我试图解析一个数学表达式,以便使用.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))
调用时,它将失败,因为replaces语句只将fx
字符串变成:
'(1^3)/(1+x**(1/2))'
因此eval
语句抛出:
Uncaught SyntaxError: Unexpected token *
我该如何解决这个问题,或者用数字计算这些表达式(三角函数、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));
您可以使用math.js的表达式解析器,如:
var math = mathjs();
var result = math.eval('(1^3)/(1+x^(1/2))', {x: 16}); // 0.2
有一点:math.js目前缺少您在示例中使用的按位操作。我不确定在您的例子中,您是否真的打算进行逐位运算,或者打算进行幂运算。
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 我如何找到一个句子中的所有空格并替换忽略它们
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 如何用更合适的内容替换document.write
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- facebook”;添加评论“;popup获胜'不要消失
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 用空格替换下划线PHP
- str.split(someString).join(someOtherString)是否等效于替换
- 使用javascript的图像替换循环
- window.location替换并传递URL历史记录条目中的变量
- 导入jQuery脚本获胜'我不处理html文件
- 替换标记中的属性
- 指令的模板必须只有一个根元素:With restrict E&替换true
- AngularJs对ng消息的自定义替换
- 用超链接替换URLS
- 用cdata标记替换脚本标记
- 为什么获胜'这个半圆长不大
- 用Java脚本替换数学表达式字符串进行求值获胜't替换所有**事件