1

修正するために使用する必要がある正規表現

if (text.indexOf("+") != -1) {
            action = "+";
        } else if (text.indexOf("-") != -1) {
            action = "-";
        } else if (text.indexOf("*") != -1) {
            action = "*";
        } else if (text.indexOf("/") != -1) {
            action = "/";
        }

このコード?

編集:

どうすればこのコードを改善できますか:

switch (action) {
        case "+":
            result = parseInt(array[0]) + parseInt(array[1]);
            break;
        case "-":
            result = parseInt(array[0]) - parseInt(array[1]);
            break;
        case "*":
            result = parseInt(array[0]) * parseInt(array[1]);
            break;
        case "/":
            result = parseInt(array[0]) / parseInt(array[1]);
            break;
        default:
            break;
        }

私はjsの初心者です。

4

1 に答える 1

4

次のいずれかを使用できます。

var action = text.replace(/.*([+*/-]).*/,'$1');

var match  = /[*+/-]/.exec(text);
var action = match && match[0];

改行の可能性がある場合はtext、最初の行を次のように変更します。

var action = text.replace(/[\d\D]*([+*/-])[\d\D]*/,'$1');

編集switch:たとえば、を使用してステートメントを改善できます

// allow floating point values, and also 
// don't accidentally interpret "011" as octal
array[0]*1 + array[1]*1; 

parseIntがおそらく悪い理由の詳細については、この回答を参照してください。

defaultcase ステートメントの余分なセクションを削除することもできます。しかし、あなたが望んでいた「改善」は、行数を減らすことだったのではないかと思います。が JavaScript の演算子=-*/(メソッドではない) であることを考えると、4 つの計算 (つまり aまたは)を避ける方法は考えられません。switchif/else if

一方、Ruby では、たとえば を使用array[0].send(action,array[1])して 4 つのケースすべてをカバーできます ;)

于 2012-04-24T14:38:29.537 に答える