javascript - 括号内的算术运算 javascript

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

没有得到任何结果

最佳答案

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

var result = parseFloat(numbers[0]);

因此

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

这更可靠一些,因为只有当数字中的字符串确实包含数字时它才起作用,如果不包含数字,则会返回NaN。另外,为了更加可靠,您可以使用 switch 指令:

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

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

关于javascript - 括号内的算术运算 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15475087/

相关文章:

javascript - 如何找到元素的 CSS3 旋转?

ios - IOS 快捷方式上的正则表达式用于行匹配

math - 计算两个相同数据集之间的汉明距离

C# 2 维 byte[][] 到 JSON.NET 到 C# byte[][] 或 Javascript 等效项失败

javascript - 如何使用 mapbox 样式连接本地 JSON 数据

regex - 使用正则表达式匹配 "magical"日期

c++ - 理解Visual C++的rand()函数的算法

math - float 学坏了吗?

javascript - Mongoose:嵌套 Json 的架构并存储它 (Node.js)

javascript - 获取地址栏中特定字符后的值