Evaluating a string as a mathematical expression in JavaScript
You can use the JavaScript Expression Evaluator library, which allows you to do stuff like:
Parser.evaluate("2 ^ x", { x: 3 });
Or mathjs, which allows stuff like:
math.eval('sin(45 deg) ^ 2');
I ended up choosing mathjs for one of my projects.
You can do + or - easily:
function addbits(s) {
var total = 0,
s = s.match(/[+\-]*(\.\d+|\d+(\.\d+)?)/g) || [];
while (s.length) {
total += parseFloat(s.shift());
}
return total;
}
var string = '1+23+4+5-30';
console.log(
addbits(string)
)
More complicated math makes eval more attractive- and certainly simpler to write.
Somebody has to parse that string. If it's not the interpreter (via eval
) then it'll need to be you, writing a parsing routine to extract numbers, operators, and anything else you want to support in a mathematical expression.
So, no, there isn't any (simple) way without eval
. If you're concerned about security (because the input you're parsing isn't from a source you control), maybe you can check the input's format (via a whitelist regex filter) before passing it to eval
?