js split with regex 将保持不匹配的分隔符

js split with regex will keep unmatched seperator

我有以下代码:

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

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

'xx,,blue,ffff'.match(/[^\,]+/)
// ["xx"]

我不明白为什么前两个例子的结果不一样,为什么拆分会保留不匹配的逗号。

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

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

I can not figure out why the result of the above two examples are not same and why split will keep the unmatched comma

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

如果您不想让逗号出现在结果中,您不应该否定它。试试这个

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

我从 \, 中删除了 \ 以仅保留 ,

你的第一个例子是

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