javascript中字符串split方法的拆分逻辑?

"aaabbbcccdeefff".split(/(\w)\1+/)

这句代码的输出结果为:

["", "a", "", "b", "", "c", "d", "e", "", "f", ""]

但是:

"aaabbbcccdeefff".replace(/(\w)\1+/g,"")

输出结果为:

"d"

所以按照我的理解,拆分结果应该为:

[d]

那里出问题了呢?

阅读 3.4k
6 个回答

作为 split 参数的正则表达式如果包换捕捉, 则捕捉的结果会被拼在结果数组中.
所以结果中会出现 a,b,c,e,f. 因为他们是(\w)捕捉的结果, ""则是由于每次迭代时分割符出现在开始或结尾则会产生一个""字符.

如果想达到预期的效果输出 [d], 可以这样做:

"aaabbbcccdeefff".replace(/(\w)\1+/g, '').split('')

如果想实现你理解的那种可以这样"aaabbbcccdeefff".replace(/(\w)\1+/g, "").split("");

replace 首先肯定返回字符串的,按照es5规范

clipboard.png

最后结果是字符串。一楼说的对,split之后才能是[d]这个结果的

字符串用replace替换一下,就变成数组了??怕是疯了

"aaabbbcccdeefff".split(/(\w){1+}/)

// =>["aaabbbcccdeefff"]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题