urlSearch.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // 传统方式
  2. function query(name) {
  3. const search = location.search.substr(1)
  4. // search: 'a=10&b=20&c=30'
  5. const reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`, 'i')
  6. const res = search.match(reg)
  7. console.log(res)
  8. // 数组第一个是完全匹配,第二个是匹配的第一个括号里面的内容,第3个是匹配的第2个括号里面的内容,第4个是匹配的第3个括号里面的内容,
  9. // ["&b=20&", "&", "20", "&"]
  10. if(res === null) {
  11. return null
  12. }
  13. return res[2]
  14. }
  15. console.log(query('b'))
  16. // URLSearchParams
  17. function query2(name) {
  18. const search = location.search
  19. const p = new URLSearchParams(search)
  20. return p.get(name)
  21. }
  22. console.log(query2('b'))
  23. // 传统方式,分析search
  24. function queryToObj() {
  25. const res = {}
  26. const search = location.search.substr(1) // 去掉前面的?
  27. search.split('&').map(paramStr => {
  28. const arr = paramStr.split('=')
  29. res[arr[0]] = arr[1]
  30. })
  31. return res
  32. }
  33. console.log(queryToObj()) // {a: "10", b: "20", c: "30"}
  34. // 使用URLSearchParams
  35. function queryToObj2(){
  36. const res = {}
  37. const pList = new URLSearchParams(location.search)
  38. pList.forEach((val, key) => {
  39. res[key] = val
  40. })
  41. return res
  42. }
  43. console.log(queryToObj2()) // {a: "10", b: "20", c: "30"}