Javascript如何通过值从URL字符串中删除参数?

时间:2018-08-23 01:53:32

标签: javascript regex url url-rewriting

如何从网址字符串中删除带有value = 3的参数?

示例网址字符串:

https://www.example.com/test/index.html?param1=4&param2=3&param3=2&param4=1&param5=3 

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式replace。分离查询字符串,然后.replace & s(或初始^)直到=3 s:

const str = 'https://www.example.com/test/index.html?param1=4&param2=3&param3=2&param4=1&param5=3';
const [base, qs] = str.split('?');
const replacedQs = qs.replace(/(^|&)[^=]+=3\b/g, '');
const output = base + (replacedQs ? '?' + replacedQs : '');
console.log(output);

答案 1 :(得分:1)

如果您要针对支持URLURLSearchParams的浏览器,则可以遍历URL的searchParams对象,检查每个参数的值,并根据需要检查delete()。最后,使用URL的href属性获取最终的URL。

var url = new URL(`https://www.example.com/test/index.html?param1=4&param2=3&param3=2&param4=1&param5=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&param2=3&param3=2&param4=1&param5=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);

相关问题