1

現在、スクリプトの 1 つを書き直していますが、理解できない問題に遭遇しました。commandは入力変数で、このテストを実行しました (どちらの正規表現も同じです)。

var parts = command.match(/([^\s"]+(?=\s*|$))|(".+?")/g);
console.log(command === "view -10 10 -10 10");
console.log(parts);
console.log(String("view -10 10 -10 10").match(/([^\s"]+(?=\s*|$))|(".+?")/g));

コンソールは今言う

true
[]
["view", "-10", "10", "-10", "10"]

これは私を完全に混乱させます。commandを使用してもテスト文字列と等しいのに、同じように分離されないのはなぜ===ですか?

4

1 に答える 1

1

OPより

問題全体の解決策は次のとおりです。プログラムの基本構造は次のとおりです。

while (<condition>) {
    var command = getNextCommand();

    var parts = command.match(/([^\s"]+(?=\s*|$))|(".+?")/g);
    processParts(parts);
}

ここprocessParts()で引数を操作しました:

function processParts(parts) {
    var foo = parts.shift();
    doSomethingElse(foo);
}

これによりparts、メインルーチンが縮小し、コードでprocessParts実際にshiftすべての要素が編集console.log(parts)され、遅延が記録されたため、空の配列が書き込まれました (dystroy のコメントを参照)。

その上、私のprocessParts()関数には、私が気付かなかった間違いがあり、それが空のせいpartsでした。その間違いを修正した後、上記のコードはpartsもう必要なく、縮小しても問題なく機能したため、再び機能しました。一般的には、これに気をつけたいと思うかもしれませんが... JavaScript は奇妙なことをします。

于 2012-09-17T07:55:11.190 に答える