1

嗨,请帮我解决这个问题

    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'  ; 

没有得到任何结果

4

1 回答 1

0

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

var result = parseFloat(numbers[0]);

因此

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

这更可靠一些,因为它仅在数字中的字符串真正包含数字时才有效,并且NaN如果它们不包含则将返回。此外,为了更加扎实,您可以走很长一段路并使用switch指令:

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

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

于 2013-03-18T16:57:40.500 回答