如何从带括号的字符串执行数学运算?

时间:2016-10-16 00:49:46

标签: javascript math eval

我很难用7( 7+(7 (7+1) ))(7)这样的括号执行数学运算。我在操作上正在eval()。我想解决这个问题就是将其转换为7*(7+(7*(7+1)))*(7)。我试过了

/(?!\*\()(\()/g

避免使用正则表达式'*('并接受'('替换方法,但我失败了。我想在*之前插入(。如何正确运行7( 7+(7 (7+1) ))(7)?我正在为计算器项目做这件事。

2 个答案:

答案 0 :(得分:1)

这是一种非正则表达式解决方案。首先用空字符串替换所有空格。然后替换"("用" *("仅当括号前面没有操作符时。



var testString = ("7( 7+(7 (7+1) ))(7)").split("").filter((e) => e!=" ");
var arr = ["+", "-", "/", "("];

var resultString = testString.reduce(function(prev, curr, i)                               
 {
     if(arr.indexOf(i-1 ? testString[i-1] : "test") && curr == "(") { 
           return prev += "*(";
       }else{
           return prev += curr;
        }
        
  },"");

console.log(resultString);




答案 1 :(得分:0)

// (expr: string) => number
function evaluate(expr) {
  return eval(
    expr
      .replace(/\s+/g, '')             // remove spaces
      .replace(/([\d|\)])\(/g, '$1*(') // insert multiplication signs
    )
}