Javascript 括号内的算术运算

Javascript 括号内的算术运算,javascript,regex,math,arithmetic-expressions,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 <

嗨,请帮我解决这个问题

    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 result = parseFloat(numbers[0]);
因此

result = eval( result + operators[i] + parseFloat(numbers[i + 1]))
这更可靠一些,因为它仅在数字中的字符串确实包含数字时才起作用,如果不包含数字,它将返回NaN。此外,为了更加可靠,您可以走很长的路,使用开关指令:

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

当然,您的解决方案更加优雅,但由于某些原因,它不起作用,这可能会帮助您发现它。在您的例子中,我还将使用两个警报函数检查这些拆分数组的实际内容。有时正则表达式不能产生您期望的输出。

如果您使用eval,那么result=evalstr如何?您正在尝试用正则表达式解析非正则上下文无关语言。这肯定会失败。你的例子可以用eval计算:eval'10+20-10-2'是18,eval'-1--2'是1。您不需要解析字符串,但使用eval不是一个好方法。是否有其他方法来解决这个问题。@Ruslan:在某些情况下,eval是可以的。我认为这是其中之一。
switch(operators[i])
{
   case "+":
   etc.
}