【发布时间】:2018-08-23 10:42:28
【问题描述】:
如何从 URL 字符串中删除带有value = 3 的参数?
示例 URL 字符串:
https://www.example.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3
【问题讨论】:
标签: javascript regex url url-rewriting
如何从 URL 字符串中删除带有value = 3 的参数?
示例 URL 字符串:
https://www.example.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3
【问题讨论】:
标签: javascript regex url url-rewriting
如果您的目标浏览器支持URL 和URLSearchParams,您可以遍历URL 的searchParams 对象,检查每个参数的值,并根据需要检查delete()。最后使用URL的href属性得到最终的url。
var url = new URL(`https://www.example.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3`)
//need a clone of the searchParams
//otherwise looping while iterating over
//it will cause problems
var params = new URLSearchParams(url.searchParams.toString());
for(let param of params){
if(param[1]==3){
url.searchParams.delete(param[0]);
}
}
console.log(url.href)
【讨论】:
有一种方法可以使用单个正则表达式来做到这一点,使用一些魔法,但我相信这需要使用lookbehinds,大多数 JavaScript 正则表达式引擎大多还不支持。作为替代方案,我们可以尝试拆分查询字符串,然后检查每个组件以查看值是否为3。如果是这样,那么我们删除该查询参数。
var url = "https://www.example.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3";
var parts = url.split(/\?/);
var params = parts[1].replace(/^.*\?/, "").split(/&/);
var param_out = "";
params.forEach(function(x){
if (!/.*=3$/.test(x))
param_out += x;
});
url = parts[0] + (param_out !== "" ? "?" + param_out : "");
console.log(url);
【讨论】:
您可以使用正则表达式replace。拆分查询字符串,然后拆分.replace&s(或最初的^)直到=3s:
const str = 'https://www.example.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3';
const [base, qs] = str.split('?');
const replacedQs = qs.replace(/(^|&)[^=]+=3\b/g, '');
const output = base + (replacedQs ? '?' + replacedQs : '');
console.log(output);