您好请帮我解决此问题
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' ;
没有得到任何结果
答案 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()
函数,查看这些分割数组的实际内容。有时正则表达式不会产生你期望它们的输出。