1

こんにちは、この問題を解決するのを手伝ってください

    var str = '10+20-10-2';
    var numbers = str.replace(/ /g, '').split(/[-+*\/]/g);
    var operators = str.replace(/ /g, '').split(/\d*/g);
    operators.shift();        
    var result = +numbers[0];        
    for (var i = 0; i < operators.length - 1; i++) {
        result = eval( result + operators[i] + numbers[i + 1] );
    }        
    alert(result)​;

上記のコードは正常に動作していますが、次のような他の入力を渡そうとすると

 var str = '-(1)-(-2)';
    var str = '-1-(-1)';
    var str = '(-1)-2'  ; 

結果が出ない

4

1 に答える 1

0

あなたの場合、evalの他に、

var result = parseFloat(numbers[0]);

その結果、

result = eval( result + operators[i] + parseFloat(numbers[i + 1]))

これは、数字の文字列に実際に数字が含まれている場合にのみ機能し、含まれNaNていない場合に返されるため、もう少し堅実です。また、さらに堅実にするために、あなたは長い道のりを進んで、switch指示を使うことができます:

switch(operators[i])
{
   case "+":
   etc.
}

もちろん、あなたの解決策はよりエレガントですが、それは何らかの理由で機能しないので、これはあなたがそれを見つけるのを助けるかもしれません。あなたの中で、私はいくつかalert()の関数でそれらの分割された配列の実際の内容もチェックしたいと思います。正規表現では、期待どおりの出力が得られない場合があります。

于 2013-03-18T16:57:40.500 に答える