function calc(str) {
var workingString = str;
function multiAndDivideFirst() {
var onlyDivideAndMultiply = /[^\-\+\"]+[\/\*]+\d/g;
var pattern = onlyDivideAndMultiply.exec(workingString) + "";
var part = calculateFromString(pattern);
workingString = workingString.replace(pattern, part);
}
while (workingString.indexOf("/") != -1 || workingString.indexOf("*") != -1) {
multiAndDivideFirst();
}
if(workingString.indexOf("+") != -1 || workingString.indexOf("-") != -1) {
var r = calculateFromString(workingString);
}
else {
var r = workingString;
}
return r;
}
function calculateFromString(str) {
var sum = 0;
workingString = str;
function evaluateString() {
signList = [];
if (workingString.indexOf("*") != -1) {
signList.push(workingString.indexOf("*"));
}
if (workingString.indexOf("/") != -1) {
signList.push(workingString.indexOf("/"));
}
if (workingString.indexOf("+") != -1) {
signList.push(workingString.indexOf("+"));
}
if (workingString.indexOf("-") != -1) {
signList.push(workingString.indexOf("-"));
}
firstSign = Math.min(...signList);
switch (workingString[firstSign]) {
case "*":
regex(/\d+(?=\*)/, /(?<=\*)\d+/, /\d+\*[0-9]+/, "multiply");
break;
case "+":
regex(/\d+(?=\+)/, /(?<=\+)\d+/, /\d+\+[0-9]+/, "plus");
break;
case "-":
regex(/\d+(?=\-)/, /(?<=\-)\d+/, /\d+\-[0-9]+/, "minus");
break;
case "/":
regex(/\d+(?=\/)/, /(?<=\/)\d+/, /\d+\/[0-9]+/, "divide");
}
}
function regex(regexOperand1, regexOperand2, regexReplace, modus) {
var op1 = regexOperand1.exec(workingString);
var op2 = regexOperand2.exec(workingString);
switch (modus) {
case "divide":
sum = parseInt(op1) / parseInt(op2);
break;
case "plus":
sum = parseInt(op1) + parseInt(op2);
break;
case "multiply":
sum = parseInt(op1) * parseInt(op2);
break;
case "minus":
sum = parseInt(op1) - parseInt(op2);
}
var repPattern = regexReplace.exec(workingString);
workingString = workingString.replace(repPattern, sum);
}
const regCount = /\d+/g;
var signListCount = str.replaceAll(regCount, "");
var p = parseInt(signListCount.length);
for (i = 0; i < p; i++) {
evaluateString();
}
return sum;
}
alert(calc("6/2+3*2"))