58

私はこの動作を理解していません:

var string = 'a,b,c,d,e:10.';
var array = string.split ('.');

私はこれを期待しています:

console.log (array); // ['a,b,c,d,e:10']
console.log (array.length); // 1

しかし、私はこれを取得します:

console.log (array); // ['a,b,c,d,e:10', '']
console.log (array.length); // 2

1 つではなく 2 つの要素が返されるのはなぜですか? どのように機能しsplitますか?

これを行う別の方法はありますか?

4

11 に答える 11

104

空の文字列を除外するフィルターを追加できます。

var string = 'a,b,c,d,e:10.';
var array = string.split ('.').filter(function(el) {return el.length != 0});
于 2012-10-11T09:15:34.497 に答える
27

これは正しく、予期される動作です。文字列にセパレーターを含めた場合、分割関数 (簡略化) は、セパレーターの左側の部分 ("a,b,c,d,e:10") を最初の要素として取り、 2 番目の要素としての残りの区切り文字 (空の文字列)。

split() の仕組みに本当に興味がある場合は、ECMA 仕様 (ECMA 262) の 148 ページと 149 ページをhttp://www.ecma-international.org/publications/files/ECMA-ST/で確認できます。 Ecma-262.pdf

于 2012-10-11T09:14:29.380 に答える
4

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split

末尾のピリオドを最初にトリムする

'a,b,c,d,e:10.'.replace(/\.$/g,''); // gives "a,b,c,d,e:10"

次に、文字列を分割します

var array = 'a,b,c,d,e:10.'.replace(/\.$/g,'').split('.');

console.log (array.length); // 1

于 2012-10-11T09:17:25.033 に答える
1

これは、文字列が文字で終わるため.です。配列の 2 番目の項目は空です。

文字列にまったく含ま.れない場合は、目的の 1 つの項目配列が得られます。

split()簡単な言葉で説明できる限り、この方法は次のように機能します。

  1. 指定された文字列で分割する指定された文字列を探します。見つからない場合は、文字列全体を含む 1 つの項目配列を返します。
  2. 見つかった場合は、指定された文字列を反復処理して、2 つの文字列の間にある文字を取得して分割します。
  3. 指定された文字列が分割する文字列で始まる場合、結果配列の最初の項目は空になります。
  4. 指定された文字列が分割する文字列で終わる場合、結果配列の最後の項目は空になります。

ここではより技術的に説明されていますが、すべてのブラウザでほぼ同じです。

于 2012-10-11T09:11:43.430 に答える
0

あなたの文字列は2つの部分で構成されているため:

1 : a,b,c,d,e:10

2 : 空

最後にドットなしで試した場合:

var string = 'a,b,c:10';
var array = string.split ('.');

出力は次のとおりです。

["a,b,c:10"]
于 2012-10-11T09:13:56.817 に答える
0

そうです、split は本来の目的を果たします。文字列を分割します。分割の 2 番目の部分が空であることだけです。

于 2012-10-11T09:12:46.820 に答える
0

「。」が1つある文字列があります。その中で、string.split('.') を使用すると、「.」の前に文字列コンテンツを持つ最初の要素を含む配列を受け取ります。文字と、"." の後の文字列の内容を持つ 2 番目の要素。- この場合は空の文字列です。

したがって、この動作は正常です。この string.split を使用して何を達成したかったですか?

于 2012-10-11T09:15:53.070 に答える