如何从字符串调用和执行运算符?

时间:2011-09-09 00:58:57

标签: javascript operators

例如:

var s = '3+3';
s.replace(/([\d.]+)([\+\-)([^,]*)/g,
        function(all, n1, operator, n2) {
                r = new Number(n1) ??? new Number(n2);
                return r;
        }
);

注意:不使用eval()

3 个答案:

答案 0 :(得分:6)

Are Variable Operators Possible?

不可能开箱即用,但他提供了一个很好的实现,如下所示。代码delnan

var operators = {
    '+': function(a, b) { return a + b },
    '<': function(a, b) { return a < b },
     // ...
};

var op = '+';
alert(operators[op](10, 20));

所以你的实现

r = operators[operator](new Number(n1), new Number(n2));

答案 1 :(得分:1)

你的正则表达式有点破碎。

/([\d.]+)([\+\-)([^,]*)/g

应该是

/([\d.]+)([+-])([\d+]+)/g

然后你可以打开运营商:

function (_, a, op, b) {
  switch (op) {
    case '+': return a - -b;
    case '-': return a - b;
  }
}

答案 2 :(得分:0)

s.replace(/(\d+)\s*([+-])\s*(\d+)/g, function(all, s1, op, s2) {
  var n1 = Number(s1), n2 = Number(s2);
  return (op=='+') ? (n1+n2) : (n1-n2);
});