JS拆分包含数字的字符串会返回带有空元素的数组

问题描述 投票:0回答:4

给定一个字符串,例如foo123并将其拆分,以便使用split(/(\d+)/g)分隔整数和字符,最后返回一个带有空元素的数组

let str  = 'foo123'
let splits = str.split(/(\d+)/g)
console.log(splits)

输出:

[ 'foo', '123', '']

虽然我期待[ 'foo', '123'],为什么会发生这种情况,如何在最后没有空元素的情况下从整数中分割字符?另外当输入字符串是例如foo123bar split方法不返回空元素。

javascript arrays split
4个回答
3
投票

为什么会这样呢?

您使用一系列数字作为分隔符。分隔符将左侧与右侧分开。在您的示例中,分隔符位于字符串的末尾,因此右侧是空的( - >空字符串)。

当输入字符串是例如foo123bar时,为什么split方法不返回空元素?

因为字符串不以您的分隔符结束。

这与使用任何其他值作为分隔符没有什么不同

console.log('foo,'.split(','));
console.log('foo,bar'.split(','));

使用正则表达式的特殊之处在于,如果分隔符本身是捕获组的一部分,则它将包含在输出中。


如果输入始终是相同的结构,即字母后跟数字,我只会找到第一个数字的索引,然后相应地切割字符串:

function split(str) {
  const match  = str.match(/\d/);
  if (match) {
    return [str.slice(0, match.index), str.slice(match.index)];
  }
  return [str];
}

console.log(split('foo123'));

1
投票

试试这个:

let str  = 'foo123'
let splits = str.split(/(\d+)/g).filter(x => x!="")
console.log(splits)

发生这种情况是因为qazxsw poi方法将您的数组(在本例中为字符串)拆分为左侧和右侧...以避免仅使用过滤器来移除空格。


1
投票

试试这个

split

它添加了一个空元素,因为您使用一系列数字作为分隔符。因此,在您的情况下,右侧将为空,因为数字后面没有字符。


0
投票

这是因为对于切片定义:....如果原始文本以分隔符开头或结尾,则该函数返回一个数组,其第一个或最后一个元素将分别为空文本。 ...

© www.soinside.com 2019 - 2024. All rights reserved.