关于split()你不知道的那些事!!!

148 阅读2分钟

今天本来愉快的敲着代码,自信满满的点击了运行,却发现报错。仔细一看居然是split分割字符串的时候出错了。一打印就看出了问题,话不多说,直接看下面的报错代码:

var s='12ab3cd', arr=s.split(/\d/);

console.log(arr);

我一看这我熟啊,以数字分隔, 那就是 [ 'ab' , 'cd' ], 打印一看居然是 [ '', '', 'ab', 'cd' ] ,把我给整不会了。前面两个空字符串元素哪里冒出来的? 但在我马上摸了摸头皮的功夫,就想到排查的可能, 两个空字符串,对应的会不会是两个数字1和2呢,于是我多加了一串数字在最前面:

var s='3312ab3cd', arr=s.split(/\d/);

console.log(arr);  //['','', '', '','ab', 'cd']

果然,我最前面有多少数字就会多几个空字符串, 于是我看向我的代码, 咦,正则改为匹配多个数字会不会就好,于是:

var s='333312ab3cd', arr=s.split(/\d+/);

console.log(arr);  // [ '', 'ab', 'cd' ]

var s='12ab3cd', arr=s.split(/\d+/);
 
console.log(arr);   // [ '', 'ab', 'cd' ]

嘿,效果是有,但是好像并没完全有,怎么始终都有一个空字符串呢,我嘞个去,给我整不会了,于是我熟练的打开了度娘,找到了原因 链接

image.png

我尝试将参数放到中间和尾部,验证一下:

// 中间
var s='a12b3cd', arr=s.split(/\d+/);
console.log(arr);   // [ 'a', 'b', 'cd' ]

var s='a12565654b3cd', arr=s.split(/\d+/);
console.log(arr);   // [ 'a', 'b', 'cd' ]


// 尾部
var s='ab3cd12', arr=s.split(/\d+/);
console.log(arr);  //  [ 'ab', 'cd', '' ]

var s='ab3cd12356456', arr=s.split(/\d+/);
console.log(arr);  //  [ 'ab', 'cd', '' ]

将参数放到中间没有任何问题,但是放到尾部或者顶部必有一个空字符串多出。至于到底为什么会多出一个空字符串, 我看了他的解释后还是一头雾水,可能是我太笨了,没能理解,于是我去找了我的好搭档--ChatGPT😄

image.png

它具体也没说是怎么实现的,只能自己默默记下了,建议以后要是用split分割的时候最好还是用 filter 过滤掉那些空字符串对象。确保万无一失。

总结:

  1. split切割字符串的时候,如果分割符在字符串头部或者是尾部,切割后会多出空字符串占位,如果分割符在字符串中间则不会有以下问题

  2. 好记性不如烂笔头,要养成多写笔记的习惯