首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript中将字符串作为数学表达式求值

在JavaScript中将字符串作为数学表达式求值
EN

Stack Overflow用户
提问于 2010-02-17 04:18:11
回答 16查看 115.2K关注 0票数 94

如何在不调用eval(string)的情况下解析和计算字符串中的数学表达式(例如'1+1')并生成其数值?

在这个例子中,我希望函数接受'1+1'并返回2

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 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编译器实例要舒服得多

票数 3
EN

Stack Overflow用户

发布于 2013-02-21 05:24:05

您可以使用JavaScript Expression Evaluator library,它允许您执行以下操作:

Parser.evaluate("2 ^ x", { x: 3 });

或者mathjs,它允许这样的东西:

math.eval('sin(45 deg) ^ 2');

我最终为我的一个项目选择了数学。

票数 81
EN

Stack Overflow用户

发布于 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更有吸引力--当然也更容易编写。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2276021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档