Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript如何按值从URL中删除参数?_Javascript_Regex_Url_Url Rewriting - Fatal编程技术网

Javascript如何按值从URL中删除参数?

Javascript如何按值从URL中删除参数?,javascript,regex,url,url-rewriting,Javascript,Regex,Url,Url Rewriting,如何从URL字符串中删除value=3的参数 URL字符串示例: https://www.example.com/test/index.html?param1=4&param2=3&param3=2&param4=1&param5=3 您可以使用正则表达式replace。拆分查询字符串,然后。替换&s(或首字母^),直到=3s: const str='1〕https://www.example.com/test/index.html?param1=4&par

如何从URL字符串中删除
value=3
的参数

URL字符串示例:

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

您可以使用正则表达式
replace
。拆分查询字符串,然后
。替换
&
s(或首字母
^
),直到
=3
s:

const str='1〕https://www.example.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3';
常量[base,qs]=str.split('?');
const replacedQs=qs.replace(/(^ |&)[^=]+=3\b/g');
常量输出=base+(replacedQs?'?'+replacedQs:“”);

控制台日志(输出)
如果您针对的是支持的浏览器,并且可以在URL的
searchParams
对象上循环,请检查每个参数的值,并根据需要执行以下操作。最后使用URL的
href
属性获取最终URL

var url=新url(`https://www.example.com/test/index.html?param1=4¶m2=3¶m3=2¶m4=1¶m5=3`)
//需要一个searchParams的克隆
//否则在迭代时循环
//这会引起问题
var params=新的URLSearchParams(url.searchParams.toString());
for(让参数中的参数){
if(参数[1]==3){
url.searchParams.delete(参数[0]);
}
}

console.log(url.href)
有一种方法可以使用一个正则表达式来实现这一点,使用一些魔法,但我相信这需要使用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]。替换(/^.*\?/,“”)。拆分(/&/);
var param_out=“”;
参数forEach(函数(x){
如果(!/.*=3$/.test(x))
参数out+=x;
});
url=parts[0]+(参数输出!==“”?“?”+参数输出:“”);

console.log(url)
您的输出仍然显示
param5=3
。我认为OP想要删除此项。@CertainPerformance实际上,您的答案有一点@mr.boris我的错误,认为我现在已经解决了您的解决方案仍然存在问题,因为如果所有查询参数的值都为3,它仍然会在URL的末尾留下一个悬空的
。谢谢我认为它比正则表达式好。@mr.boris请参阅更新的示例,对其进行迭代并同时删除将导致其跳过条目,因此您必须先进行克隆并循环克隆以防止出现此问题(类似于迭代)。谢谢。我认为这是浏览器最受支持的方法!