JavaScript中如何移除查询字符串参数?
P粉239164234
P粉239164234 2023-08-20 18:46:10
0
2
386

有没有比使用正则表达式更好的方法来从URL字符串的查询字符串中删除参数的标准JavaScript?

到目前为止,这是我想到的方法,在我的测试中似乎有效,但我不喜欢重新发明查询字符串解析!

function RemoveParameterFromUrl(url, parameter) { if (typeof parameter == "undefined" || parameter == null || parameter == "") throw new Error("parameter is required"); url = url.replace(new RegExp("\b" + parameter + "=[^&;]+[&;]?", "gi"), ""); // 移除任何剩余的垃圾 url = url.replace(/[&;]$/, ""); return url; }

P粉239164234
P粉239164234

全部回复 (2)
P粉163465905

现代浏览器提供了URLSearchParams接口来处理搜索参数。该接口具有delete方法,可以根据名称删除参数。

if (typeof URLSearchParams !== 'undefined') { const params = new URLSearchParams('param1=1¶m2=2¶m3=3') console.log(params.toString()) params.delete('param2') console.log(params.toString()) } else { console.log(`您的浏览器 ${navigator.appVersion} 不支持URLSearchParams`) }
    P粉506963842
    "[&;]?" + parameter + "=[^&;]+"

    看起来很危险,因为参数 'bar' 会匹配:

    ?a=b&foobar=c

    此外,如果parameter中包含任何在正则表达式中有特殊含义的字符,比如 '.',这个正则表达式就会失败。而且它不是全局正则表达式,所以只会删除一个参数的实例。

    我不会使用简单的正则表达式来做这个,我会解析参数并丢弃不需要的参数。

    function removeURLParameter(url, parameter) { //如果你有一个location/link对象,最好使用l.search var urlparts = url.split('?'); if (urlparts.length >= 2) { var prefix = encodeURIComponent(parameter) + '='; var pars = urlparts[1].split(/[&;]/g); //反向迭代可能会破坏性 for (var i = pars.length; i-- > 0;) { //字符串.startsWith的习惯用法 if (pars[i].lastIndexOf(prefix, 0) !== -1) { pars.splice(i, 1); } } return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : ''); } return url; }
      最新下载
      更多>
      网站特效
      网站源码
      网站素材
      前端模板
      关于我们 免责声明 Sitemap
      PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!