与正则表达式拆分的 js 将保持无与伦比的分隔符

js split with regex will keep unmatched seperator

本文关键字:无与伦比 分隔符 js 正则表达式 拆分      更新时间:2023-09-26

我有以下代码:

console.log('xx,,blue,ffff'.split(/[^',]+/));
// ["", ",,", ",", ""]
console.log('xx,,blue,ffff'.split('xx'));
//  ["", ",,blue,ffff"]
'xx,,blue,ffff'.match(/[^',]+/)
// ["xx"]

我无法弄清楚为什么前两个示例的结果不同,以及为什么拆分将保留不匹配的逗号。

编辑:添加我的原始想法:

/[^',]+/将匹配xx,然后split方法将与xx拆分'xx,,blue,ffff'并得到["", ",,blue,ffff"],但结果是["", ",,blue,ffff"]我错在哪里?

你的第一个例子是

console.log('xx,,blue,ffff'.split(/[^',]+/));

它将给定的字符串拆分为 anything that is not comma .在你的字符串中有三个部分没有comma - xxblueffff。这些是将拆分字符串的分隔符。所以你得到"", ",,", ",", "".

在第二个示例中

console.log('xx,,blue,ffff'.split('xx'));

它根据xx拆分字符串。所以有两个字符串,一个在xx之前是empty,一个在xx后面是,,blue,ffff

我不知道为什么上面两个例子的结果不是 相同以及为什么拆分将保留不匹配的逗号

String.split结果不会保留匹配的结果,因为它会从中拆分输入字符串(通过将匹配的项目视为分隔符(。

如果你不希望逗号出现在结果中,你不应该否定它。试试这个

console.log('xx,,blue,ffff'.split(/[,]+/));

我从',中删除了',只保留,