これでうまくいくはずです:
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 では、上記のように別の正規表現で実行する方がはるかに簡単でコンパクトです (反復が少なくなります)。