与正则表达式分开的js将保持无与伦比的分离器

时间:2016-03-29 09:48:29

标签: javascript regex split

我有以下代码:

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

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

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

我无法弄清楚为什么前两个例子的结果不一样,为什么split会保留不匹配的逗号。

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

/[^\,]+/将匹配xx,然后split方法会将'xx,,blue,ffff'xx分开并获得["", ",,blue,ffff"],但结果是["", ",,blue,ffff"]我错了吗?

2 个答案:

答案 0 :(得分:0)

  

我无法弄清楚为什么上述两个例子的结果不是   同样以及为什么分裂将保留无与伦比的逗号

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

如果你不想让逗号进入结果,你就不应该否定它。试试这个

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

我从\移除了\,,仅保留,

答案 1 :(得分:0)

你的第一个例子是

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

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

在你的第二个例子中

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

它基于xx拆分字符串。因此xx之前有两个字符串1,emptyxx之后的字符串,,blue,ffff