括号内的算术运算javascript

时间:2013-03-18 10:53:52

标签: javascript regex math arithmetic-expressions

您好请帮我解决此问题

    var str = '10+20-10-2';
    var numbers = str.replace(/ /g, '').split(/[-+*\/]/g);
    var operators = str.replace(/ /g, '').split(/\d*/g);
    operators.shift();        
    var result = +numbers[0];        
    for (var i = 0; i < operators.length - 1; i++) {
        result = eval( result + operators[i] + numbers[i + 1] );
    }        
    alert(result)​;

上面的代码工作正常,但是当我试图传递一些其他输入时,如

 var str = '-(1)-(-2)';
    var str = '-1-(-1)';
    var str = '(-1)-2'  ; 

没有得到任何结果

1 个答案:

答案 0 :(得分:0)

我想在你的情况下,除了eval之外,你还可以使用

var result = parseFloat(numbers[0]);

因此

result = eval( result + operators[i] + parseFloat(numbers[i + 1]))

这有点扎实,因为只有当数字中的字符串真的包含数字时它才有效,如果没有则返回NaN。此外,为了更加稳固,您可以走很长的路并使用switch指令:

switch(operators[i])
{
   case "+":
   etc.
}

当然,您的解决方案更优雅,但由于某些原因它不起作用,这可能会帮助您发现它。在你身上,我还要检查几个alert()函数,查看这些分割数组的实际内容。有时正则表达式不会产生你期望它们的输出。