我有以下代码:
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"]
我错了吗?
答案 0 :(得分:0)
我无法弄清楚为什么上述两个例子的结果不是 同样以及为什么分裂将保留无与伦比的逗号
String.split
结果不会保持匹配的结果,因为它会从中分割输入字符串(通过将匹配的项目视为分隔符)。
如果你不想让逗号进入结果,你就不应该否定它。试试这个
console.log('xx,,blue,ffff'.split(/[,]+/));
我从\
移除了\,
,仅保留,
答案 1 :(得分:0)
你的第一个例子是
console.log('xx,,blue,ffff'.split(/[^\,]+/));
它将给定字符串拆分为anything that is not comma
。在您的字符串中,有三个部分不是comma
- xx
,blue
和ffff
。这些是将分割字符串的分隔符。所以你得到"", ",,", ",", ""
。
在你的第二个例子中
console.log('xx,,blue,ffff'.split('xx'));
它基于xx
拆分字符串。因此xx
之前有两个字符串1,empty
,xx
之后的字符串,,blue,ffff