如何从网址字符串中删除带有value = 3
的参数?
示例网址字符串:
https://www.example.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3
答案 0 :(得分:1)
您可以使用正则表达式replace
。分离查询字符串,然后.replace
&
s(或初始^
)直到=3
s:
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);
答案 1 :(得分:1)
如果您要针对支持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)
答案 2 :(得分:1)
有一种方法可以使用单个正则表达式使用一些魔术来做到这一点,但是我认为这需要使用lookbehinds,大多数JavaScript正则表达式引擎大多数尚不支持lookbehinds。或者,我们可以尝试拆分查询字符串,然后仅检查每个组件以查看值是否为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);