はじめに
会社のシステム開発において文字列で入力した計算式を計算するというものを作成しているのですが、少し思い通りいかなかった部分を備忘録がてら記載しております。
内容
例えば、以下の文字列で構成された計算式を計算しようと思うとエラーが発生してしまいます。
var string = "1--1-+1+-1"
var result = Function('return ('+string+');')();
console.log(result);
これは、途中で --
を含んでいるため、これを置換すれば計算は通ります。
var string = "1--1-+1+-1".replace("--","+");
var result = Function('return ('+string+');')();
console.log(string);
console.log(result);
1+1-+1+-1
0
また、()の隣に演算子がない場合にもエラーになります。
var string = "1+2(1+2)(3+4)2+1";
var result = Function('return ('+string+');')();
console.log(result);
こちらも、掛け算をするよう文字を置換する必要があります(。
// 数字( → 数字*(、)数字 → )*数字、)( → )*()と変換
var string = "1+2(1+2)(3+4)2+1".replace(/(\d+)(\()/g,"$1*$2").replace(/(\))(\(|\d+)/g,"$1*$2");
var result = Function('return ('+string+');')();
console.log(string);
console.log(result);
1+2*(1+2)*(3+4)*2+1
86