2

JavaScriptを学習しているときに、Sting.split()メソッドから返された配列(正規表現を引数として)を出力したときの出力が以下のようになる理由がわかりませんでした。

var colorString = "red,blue,green,yellow";
var colors = colorString.split(/[^\,]+/);
document.write(colors); //this print 7 times comma: ,,,,,,,

ただし、配列の色の個々の要素を出力すると、空の文字列、3つのコンマ、および空の文字列が出力されます。

 document.write(colors[0]);  //empty string
 document.write(colors[1]);  //,
 document.write(colors[2]);  //,
 document.write(colors[3]);  //,
 document.write(colors[4]);  //empty string
 document.write(colors[5]);  //undefined
 document.write(colors[6]);  //undefined

次に、配列を直接印刷すると7つのコンマが表示されるのはなぜですか。

2番目の出力に3つのコンマがあるのは正しいと思いますが、開始(インデックス0)と終了の空の文字列(インデックス4)がある理由がわかりませんでした。

私がここでめちゃくちゃになっていることを説明してください。

4

3 に答える 3

8

/[^\,]+/カンマではない1つ以上の文字で分割します。redしたがって、JavaScriptは、などで文字列を分割しますblue。結果として生じる残り物は、最初の空の文字列(インデックス0から0までのサブ文字列)、コンマ、および最後の空の文字列です。配列の範囲外に出ると、undefined(他の配列と同様に)取得します。

red,blue,green,yellow
xxx xxxx xxxxx xxxxxx   <-- x is what is being eaten during split, because it's the delimiter

必要.split(",")なのは、コンマで分割される、コンマが食べられて色が残るようにすることです。

これで、を実行するdocument.write(someArray)と、配列が文字列に変換されて表示できるようになります。これは事実上someArray.join()、が呼び出されることを意味し、デフォルトでは間にコンマが挿入されます。したがって、コンマがコンマで結合され、さらに多くのコンマが生成されます。

于 2012-10-13T21:24:14.477 に答える
5

配列を出力すると、配列のさまざまな要素もコンマで区切られます。したがって、出力は次の5つの配列要素です。

[empty string],[comma],[comma],[comma],[empty string]

7つのコンマに相当します。色の代わりにコンマと空の文字列を取得する理由は、split(一致するすべてのものを返すのではなく)一致するすべてのもので分割されるためです。したがって、正規表現はまったく使用せず、次の場所で分割して,ください。

var colors = colorString.split(',');
于 2012-10-13T21:24:44.883 に答える
2

[^ \、] <-これは、コンマ以外のすべてを意味します

試す var colors = colorString.split(',');

于 2012-10-13T21:25:25.270 に答える