鍍金池/ 問答/Linux  HTML/ 在Koa2源碼中發(fā)現(xiàn)多次使用xx.split(/\s*,\s*/),為什么不使用

在Koa2源碼中發(fā)現(xiàn)多次使用xx.split(/\s*,\s*/),為什么不使用xx.split(',')?

var a = ',,,111,,,';
console.time('測試 a 速度')
a.split(/\s*,\s*/)[0]
console.timeEnd('測試 a 速度')
console.time('測試 b 速度')
a.split(',')[0]
console.timeEnd('測試 b 速度')

上面代碼可以測試出b的速度明顯比a的快,
然而在Koa2源碼中發(fā)現(xiàn)多次使用xx.split(/s,s/),為什么不使用xx.split(',')?
希望可以得到解答,萬分感謝!
下面圖片是Koa2 lib > request.js文件中的一部分截圖:
圖片描述

回答
編輯回答
笨小蛋

/\s*,\s*/這個(gè)正則匹配的是0到多個(gè)空白符,然后是逗號,然后是0到多個(gè)空白符;
split(/\s*,\s*/)split(',')的區(qū)別是要不要處理逗號前后的空白符;
一般情況下,我們認(rèn)為字符串前后的空白符都是沒有什么作用的,所以會使用string.trim()方法來去掉前后的空白符。

所以,假設(shè)需要處理的字符串是"Nancy , Lucy",我們想要的結(jié)果是["Nancy", "Lucy"]
那么,使用split(/\s*,\s*/)的結(jié)果就是想要的結(jié)果:

var str = "Nancy  ,  Lucy"
str.split(/\s*,\s*/) // ["Nancy", "Lucy"]

如果使用split(','),則我們需要對split之后的數(shù)組的每個(gè)元素多進(jìn)行一次trim()操作:

var str = "Nancy  ,  Lucy"
var result = str.split(',') // ["Nancy  ", "  Lucy"]
result = result.map(item => item.trim()) // 此時(shí)result為["Nancy", "Lucy"]
2018年2月5日 15:26
編輯回答
安于心

因?yàn)樗麄兿胱龅氖虏皇?split(',')。你可以試試var a = ',, ,111,,,'; 時(shí)split結(jié)果有什么不同。

2017年8月28日 20:50
編輯回答
朕略傻

簡單的字符串可以使用前者來做,如果復(fù)雜點(diǎn)的字符串,只用正則來做一是標(biāo)準(zhǔn),而是效率高。

2017年10月10日 16:10