javascript - How to call and execute an operator from string? - Stack Overflow

for example:var s = '3+3';s.replace(([d.]+)([+-)([^,]*)g,function(all, n1, operator, n2

for example:

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

note: not using eval()

for example:

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

note: not using eval()

Share Improve this question edited Mar 17, 2015 at 21:11 horns 1,9431 gold badge20 silver badges26 bronze badges asked Sep 9, 2011 at 0:58 The MaskThe Mask 17.5k38 gold badges115 silver badges189 bronze badges 4
  • Looks like one of the few cases where eval() would be handy. – alex Commented Sep 9, 2011 at 1:03
  • Is new Function() off limits too? – alex Commented Sep 9, 2011 at 1:07
  • Why not using eval() out of curiosity? – Demian Brecht Commented Sep 9, 2011 at 1:10
  • You might find the following series interesting: Essentials of Interpretation. They are small lesson about puter program interpretation, written in Javascript, the goal at the end IMO will be to implement a small scheme-like language. – Christian C. Salvadó Commented Sep 9, 2011 at 1:20
Add a ment  | 

3 Answers 3

Reset to default 7

Are Variable Operators Possible?

Not possible out of the box, but he gives a nice implementation to do it, as follows. Code by delnan.

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

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

So for your implementation

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

Your regex is a bit broken.

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

should probably be

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

then you can switch on the operator:

function (_, a, op, b) {
  switch (op) {
    case '+': return a - -b;
    case '-': return a - b;
  }
}
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);
});

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745636494a4637426.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信