JSFiddle - React, Tailwind, and code Playground
JavaScript
var numRegex = "\\-?\\d+(?:\\.\\d+)?";
var operations = {
"^" : function (a, b) { return Math.pow(a, b); },
"*" : function (a, b) { return a * b; },
"/" : function (a, b) { return a / b; },
"+" : function (a, b) { return +a + +b; },
"-" : function (a, b) { return a - b; }
};
function opCalc(expr, operator) {
var opRegex = new RegExp("(" + numRegex + ")\\" + operator + "(" + numRegex + ")", "g");
return expr.replace(opRegex, function (_, a, b) {
return +operations[operator](a, b).toFixed(16);
});
}
function exCalc(expr) {
expr = expr.replace(/\s/g, "");
while ( !new RegExp("^" + numRegex + "$").test(expr) ) {
expr = expr.replace(new RegExp("\\((" + numRegex + ")\\)", "g"), "$1");
expr = opCalc(expr, "^");
expr = opCalc(expr, "*");
expr = opCalc(expr, "/");
expr = opCalc(expr, "+");
expr = opCalc(expr, "-");
}
return expr;
}
alert( exCalc( "6 * (-2.5 + 1.5 * 3)" ) );