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

为什么返回两个元素而不是一个?如何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 回答
48

用于排除空字符串的@xdazz 版本的稍微简单的版本(使用ES6 箭头函数):

var array = string.split('.').filter(x => x);
于 2017-05-04T15:12:03.163 回答
27

这是正确和预期的行为。鉴于您已在字符串中包含分隔符,split 函数(简化)将分隔符左侧的部分 ("a,b,c,d,e:10") 作为第一个元素,并将部分分隔符的其余部分(一个空字符串)作为第二个元素。

如果您真的对 split() 的工作原理感到好奇,可以在http://www.ecma-international.org/publications/files/ECMA-ST/上查看 ECMA 规范 (ECMA 262) 的第 148 页和第 149 页ECMA-262.pdf

于 2012-10-11T09:14:29.380 回答
17

使用String.split()方法和Array.filter()方法。

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

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

于 2017-05-25T07:53:45.253 回答
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

那是因为字符串以.字符结尾——数组的第二项是空的。

如果字符串根本不包含.,您将拥有所需的一项数组。

据我可以用简单的话解释,该split()方法的工作原理如下:

  1. 在给定的字符串中查找要拆分的给定字符串。如果未找到,则返回一个包含整个字符串的项目数组。
  2. 如果找到,则遍历给定的字符串,将字符串的每两次出现之间的字符作为分割依据。
  3. 如果给定字符串以要分割的字符串开头,则结果数组的第一项将为空。
  4. 如果给定字符串以要分割的字符串结尾,则结果数组的最后一项将为空。

这里有更多技术性的解释,对于所有浏览器来说几乎都是一样的。

于 2012-10-11T09:11:43.430 回答
1

根据MDN 网络文档

注意:当字符串为空时,split() 返回一个包含一个空字符串的数组,而不是一个空数组。如果字符串和分隔符都是空字符串,则返回一个空数组。

const myString = '';
const splits = myString.split();

console.log(splits); 

// ↪ [""]
于 2019-08-28T06:53:57.873 回答
0

好吧, split 做了它要做的事情,它分割你的字符串。只是拆分的第二部分是空的。

于 2012-10-11T09:12:46.820 回答
0

因为您的字符串由两部分组成:

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

你有一个带有一个“。”的字符串。在其中,当您使用 string.split('.') 时,您会收到包含第一个元素的数组,其中字符串内容在“。”之前 字符和第二个元素与“。”之后的字符串内容。- 在这种情况下是空字符串。

所以,这种行为是正常的。你想通过使用这个 string.split 来实现什么?

于 2012-10-11T09:15:53.070 回答
-1

试试这个

javascript 通过 split 函数给出两个数组,然后

var Val = "abc@gmail.com";
var mail = Val.split('@');

if(mail[0] && mail[1])  {   alert('valid'); }
else    {   alert('Enter valid email id');  valid=0;    }

如果两个数组都包含大于 0 的长度,则条件为真

于 2017-02-14T13:02:04.067 回答