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('10 - 2 * (5 - 2)') );