如何在不调用eval(string)
的情况下解析和计算字符串中的数学表达式(例如'1+1'
)并生成其数值?
在这个例子中,我希望函数接受'1+1'
并返回2
。
发布于 2010-03-06 19:47:57
我最终选择了这个解决方案,它适用于正整数和负整数的求和(对正则表达式稍作修改也适用于小数):
function sum(string) {
return (string.match(/^(-?\d+)(\+-?\d+)*$/)) ? string.split('+').stringSum() : NaN;
}
Array.prototype.stringSum = function() {
var sum = 0;
for(var k=0, kl=this.length;k<kl;k++)
{
sum += +this[k];
}
return sum;
}
我不确定它是否比eval()快,但由于我必须执行该操作很多次,所以运行这个脚本比创建大量javascript编译器实例要舒服得多
发布于 2013-02-21 05:24:05
您可以使用JavaScript Expression Evaluator library,它允许您执行以下操作:
Parser.evaluate("2 ^ x", { x: 3 });
或者mathjs,它允许这样的东西:
math.eval('sin(45 deg) ^ 2');
我最终为我的一个项目选择了数学。
发布于 2010-02-17 04:43:02
您可以轻松地执行+或-操作:
function addbits(s) {
var total = 0,
s = s.match(/[+\-]*(\.\d+|\d+(\.\d+)?)/g) || [];
while (s.length) {
total += parseFloat(s.shift());
}
return total;
}
var string = '1+23+4+5-30';
console.log(
addbits(string)
)
更复杂的数学使得eval更有吸引力--当然也更容易编写。
https://stackoverflow.com/questions/2276021
复制相似问题