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