私はこのコード行を実行しようとしていたし、なぜそれが動作していないのだろうかと思っていた。誰にもこれに対する答えがありますか?質問のjavascript - string.replace()
var string = "foo bar";
string = string.replace(" ", "");
alert(string.length);
なぜ文字列の長さが6に変更されないのですか?
私はこのコード行を実行しようとしていたし、なぜそれが動作していないのだろうかと思っていた。誰にもこれに対する答えがありますか?質問のjavascript - string.replace()
var string = "foo bar";
string = string.replace(" ", "");
alert(string.length);
なぜ文字列の長さが6に変更されないのですか?
文字列にspace
が複数あり、.replace
が1つのスペースを置き換えているため、最初に見つかったものがあります。
予想通りこれは一つだけのスペース
var string = "foo bar";
string = string.replace(" ", "");
alert(string.length);
機能だけあなたが検索文字列の1つのインスタンスを置き換えると、動作します。
string = string.replace(/\s+/g, '');
すべて「空白」の文字が削除さ:
以上を交換するには、正規表現と一致させることができます。 "\ s"は空白と一致し、 "+"は空白文字の "1つ以上の出現"を意味し、後続の "g"は "文字列中のすべての一致するシーケンスに対して行う"を意味します。
置換すると、最初のパラメータとして文字列が渡されたときに、その文字列の最初の文字列が置き換えられます。すべてを置き換えるには、正規表現が必要です。
alert("foo bar".replace(/ /g, ""));
これは、1つのスペースだけが置き換えられたためです。 JavaScript 1.5仕様では、String.replace()
は最初のパラメータとして正規表現をとり、文字列パラメータの動作は未定義です。ブラウザは後で同様に文字列を扱うことにしましたが、文字列にg
フラグを指定する方法がないため、1回の置換だけが行われます。これは、あなたがやりたいことになります。
string = string.replace(/ /g, '');
を先のとがった(/\s+/g
)によって提供されるバージョンは、しかし、より効率的かもしれません。また、他の種類の空白(タブ、改行)も置き換えます。