簡單的說一下背景,看到小伙伴給我發的項目中有一段獲取當前url特定query值的代碼,本着能寫1行代碼就不寫5行代碼的原則,我把這個獲取方法給改了一下
之前的代碼如下:
const queryArr = location.search.substring(1).split('&')
let name = ''
queryArr.forEach(item => {
const _arr = item.split('=')
if (_arr[0] === 'name') {
name = _arr[1]
}
})
花了這么大工夫就為了拿到query中name字段的值,其實有更簡單的方法,一行代碼就可以搞定
巧用正則match
我們來看一下一行代碼怎么拿到的
const name = location.search.match(/name=([^&]*)/)[1]
這里介紹一次match方法,match方法返回一個數組,數組中索引0
為正則表達式匹配到的全部字符;
比如這里的字符串如果為?name=xiaoming&id=123
,索引0
就為'name=xiaoming'
;
0
以后的索引為正則表達式匹配的組,即為()內的內容,上面只有一個組就是([^&]*)
,所以直接拿到就是'小明'
,所以上面的代碼直接拿索引1
就是對應的name值;
最后下班,又是充實的一天~~~