2011-06-22 9 views
0

私はこのコード行を実行しようとしていたし、なぜそれが動作していないのだろうかと思っていた。誰にもこれに対する答えがありますか?質問のjavascript - string.replace()

var string = "foo  bar"; 
string = string.replace(" ", ""); 
alert(string.length); 

なぜ文字列の長さが6に変更されないのですか?

答えて

2

文字列にspaceが複数あり、.replaceが1つのスペースを置き換えているため、最初に見つかったものがあります。

予想通りこれは一つだけのスペース

var string = "foo bar"; 
string = string.replace(" ", ""); 
alert(string.length); 
4

機能だけあなたが検索文字列の1つのインスタンスを置き換えると、動作します。

string = string.replace(/\s+/g, ''); 

すべて「空白」の文字が削除さ:

以上を交換するには、正規表現と一致させることができます。 "\ s"は空白と一致し、 "+"は空白文字の "1つ以上の出現"を意味し、後続の "g"は "文字列中のすべての一致するシーケンスに対して行う"を意味します。

1

置換すると、最初のパラメータとして文字列が渡されたときに、その文字列の最初の文字列が置き換えられます。すべてを置き換えるには、正規表現が必要です。

alert("foo  bar".replace(/ /g, "")); 
0

これは、1つのスペースだけが置き換えられたためです。 JavaScript 1.5仕様では、String.replace()は最初のパラメータとして正規表現をとり、文字列パラメータの動作は未定義です。ブラウザは後で同様に文字列を扱うことにしましたが、文字列にgフラグを指定する方法がないため、1回の置換だけが行われます。これは、あなたがやりたいことになります。

string = string.replace(/ /g, ''); 

を先のとがった(/\s+/g)によって提供されるバージョンは、しかし、より効率的かもしれません。また、他の種類の空白(タブ、改行)も置き換えます。