js 删除URL中指定参数

看了网上大部分的实现方法,都是对url search参数进行切割,遍历查找需要删除的,再想办法拼接,很麻烦。我直接用正则进行匹配替换,不需要url本身的参数遍历,时间复杂度为O(1)。

/**
 * 删除URL中指定search参数,会将参数值一起删除
 * @param {string} url 地址字符串
 * @param {array} aParam 要删除的参数key数组,如['name','age']
 * @return {string} 返回新URL字符串
 */
function ridUrlParam(url,aParam){
    aParam.forEach(item => {
      const fromindex = url.indexOf(`${item}=`) //必须加=号,避免参数值中包含item字符串
      if (fromindex !== -1) {
        // 通过url特殊符号,计算出=号后面的的字符数,用于生成replace正则
        const startIndex = url.indexOf('=', fromindex)
        const endIndex = url.indexOf('&', fromindex)
        const hashIndex = url.indexOf('#', fromindex)
        
        let reg;
        if (endIndex !== -1) { // 后面还有search参数的情况
          const num = endIndex - startIndex
          reg = new RegExp(`${item}=.{${num}}`)
          url = url.replace(reg, '')
        } else if (hashIndex !== -1) { // 有hash参数的情况
          const num = hashIndex - startIndex - 1
          reg = new RegExp(`&?${item}=.{${num}}`)
          url = url.replace(reg, '')
        } else { // search参数在最后或只有一个参数的情况
          reg = new RegExp(`&?${item}=.+`)
          url = url.replace(reg, '')
        }
      }
    });
    const noSearchParam = url.indexOf('=') 
    if( noSearchParam === -1 ){
      url = url.replace(/\?/, '') // 如果已经没有参数,删除?号
    }
    return url    
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值