我想删除我的网址www.domain.com?a=1&b=2&c=3
例如,我已经从stackoverflow获取此代码,这可以正常工作:
return location.href=location.href.replace(/&?a=([^&]$|[^&]*)/i, "");
由于我不熟悉正则表达式,如何在此行中添加另一个参数? 现在它只删除“a”参数。我也希望删除“b”参数。
修改
Ofcorse我不是用“a”和“b”作为参数。它如何使用“crop-image”和“subscription”等参数,因此域名如下所示:www.domain.com?crop-image=1&subscription=1&keep=me
答案 0 :(得分:6)
将[ab]
替换为您要删除的参数的一组捕获组。
location.href=location.href.replace(/&?((crop-image)|(subscription))=([^&]$|[^&]*)/gi, "");
每个组中包含的内容将与完整参数名称完全匹配。您可以根据需要将or
(|
)组合在一起。
答案 1 :(得分:4)
这应该适合你:
location.href=location.href.replace(/&?[ab]=([^&]$|[^&]*)/gi, "");
[ab]
以便它匹配a
或b
中的一个。添加g
标志使其成为全局标志,以便它匹配多个实例。
var href = "www.domain.com?f=4&a=1&foo=bar&b=2&c=3";
href=href.replace(/&?[ab]=([^&]$|[^&]*)/gi, "");
console.log(href); // www.domain.com?f=4&foo=bar&c=3
此外,此部分不是必需([^&]$|[^&]*)
,只需[^&]*
即可制作此正则表达式:
/&?[ab]=[^&]*/gi
由于您的编辑(较长的属性名称),这对您有用。请注意,最后的“或”仍然不是必需的,因为在这种情况下它没有用处。
var href = "www.domain.com?ab=4&c=5&ba=2&f=10";
href=href.replace(/&?((ab)|(ba))=[^&]*/gi, "");
console.log(href); //www.domain.com?&c=5&f=10
请注意,如果第一个属性被删除,这将在开头留下&
?这不应该导致任何问题,但如果你仍然想解决这个问题,你可以这样做:
href=href.replace(/&?((ab)|(ba))=[^&]*/gi, "").replace(/\?&/,"?");
有了这个,您最终会得到www.domain.com?c=5&f=10
而不是www.domain.com?&c=5&f=10
。虽然可以在单个正则表达式中完成,特别是在没有lookbehinds的javascript中,它可以更容易,更紧凑(更少重复)在单独的正则表达式中执行它,就像我上面那样。