How do I parse and evaluate a mathematical expression in a string (e.g. '1+1'
) without invoking eval(string)
to yield its numerical value?
With that example, I want the function to accept '1+1'
and return 2
.
The eval() function in JavaScript is used to evaluate the expression. It is JavaScirpt's global function, which evaluates the specified string as JavaScript code and executes it. The parameter of the eval() function is a string. If the parameter represents the statements, eval() evaluates the statements.
var myString = "225 + 15 - 10" var newString = myString. split(" "); This would turn myString into an array: ["225", "+", "15", "-", "10"];
Strings and Mathematical Operators With string + is used for concatenation. For example, 'JS is' + ' fun'; results in 'JS is fun' .
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With