1. ホーム
  2. javascript

[解決済み] JavaScriptで文字列を数式として評価する

2023-01-18 14:50:05

質問

文字列中の数式をパースして評価するにはどうすればよいのでしょうか (例えば '1+1' を呼び出すことなく) eval(string) を呼び出すことなく、その数値が得られるか?

この例で、私は関数が '1+1' を受け取り 2 .

どのように解決するのですか?

私は最終的にこの解決策を採用しました。これは正負の整数の合計に対して機能します(正規表現を少し修正すれば、小数に対しても機能します)。

function sum(string) {
  return (string.match(/^(-?\d+)(\+-?\d+)*$/)) ? string.split('+').stringSum() : NaN;
}   

Array.prototype.stringSum = function() {
    var sum = 0;
    for(var k=0, kl=this.length;k<kl;k++)
    {
        sum += +this[k];
    }
    return sum;
}

eval()よりも速いかどうかはわかりませんが、何度も処理を実行しなければならないので、javascriptコンパイラのインスタンスをたくさん作るよりも、このスクリプトを実行する方がはるかに快適です。