给定一个字符串,例如foo123
并将其拆分,以便使用split(/(\d+)/g)
分隔整数和字符,最后返回一个带有空元素的数组
let str = 'foo123'
let splits = str.split(/(\d+)/g)
console.log(splits)
输出:
[ 'foo', '123', '']
虽然我期待[ 'foo', '123']
,为什么会发生这种情况,如何在最后没有空元素的情况下从整数中分割字符?另外当输入字符串是例如foo123bar
split方法不返回空元素。
为什么会这样呢?
您使用一系列数字作为分隔符。分隔符将左侧与右侧分开。在您的示例中,分隔符位于字符串的末尾,因此右侧是空的( - >空字符串)。
当输入字符串是例如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'));
试试这个:
let str = 'foo123'
let splits = str.split(/(\d+)/g).filter(x => x!="")
console.log(splits)
发生这种情况是因为qazxsw poi方法将您的数组(在本例中为字符串)拆分为左侧和右侧...以避免仅使用过滤器来移除空格。
试试这个
split
它添加了一个空元素,因为您使用一系列数字作为分隔符。因此,在您的情况下,右侧将为空,因为数字后面没有字符。
这是因为对于切片定义:....如果原始文本以分隔符开头或结尾,则该函数返回一个数组,其第一个或最后一个元素将分别为空文本。 ...