如何删除/取消设置一些获取参数并使用jQuery刷新

时间:2013-08-20 15:53:13

标签: jquery regex url-parameters

我想删除我的网址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

2 个答案:

答案 0 :(得分:6)

[ab]替换为您要删除的参数的一组捕获组。

location.href=location.href.replace(/&?((crop-image)|(subscription))=([^&]$|[^&]*)/gi, "");

每个组中包含的内容将与完整参数名称完全匹配。您可以根据需要将or|)组合在一起。

答案 1 :(得分:4)

这应该适合你:

location.href=location.href.replace(/&?[ab]=([^&]$|[^&]*)/gi, "");

[ab]以便它匹配ab中的一个。添加g标志使其成为全局标志,以便它匹配多个实例。

Fiddle

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

由于您的编辑(较长的属性名称),这对您有用。请注意,最后的“或”仍然不是必需的,因为在这种情况下它没有用处。

Fiddle

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中,它可以更容易,更紧凑(更少重复)在单独的正则表达式中执行它,就像我上面那样。