2

我想删除我的网址的一些参数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

4

2 回答 2

6

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

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

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

于 2013-08-20T16:33:51.070 回答
4

这应该为您解决问题:

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

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

小提琴

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. 虽然可以在单个正则表达式中执行此操作,尤其是在没有后视的 javascript 中,但像我上面所做的那样,在单独的正则表达式中执行此操作要容易得多且更紧凑(重复性更少)。

于 2013-08-20T15:58:30.983 回答