如何解析和评估字符串(例如'1+1')中的数学表达式而不调用eval(string)其数值?
'1+1'
eval(string)
在该示例中,我希望函数接受'1+1'并返回2。
2
我最终选择了该解决方案,该解决方案可用于对正整数和负整数进行求和(对正则表达式进行少许修改也可用于十进制):
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编译器实例负载相比,运行此脚本要舒服得多