2

URL のいくつかのパラメーターを削除したいwww.domain.com?a=1&b=2&c=3

たとえば、私はここでスタックオーバーフローからこのコードを既に持っていますが、これは正常に動作します:

return location.href=location.href.replace(/&?a=([^&]$|[^&]*)/i, "");

私は正規表現に慣れていないので、この行に別のパラメーターを追加するにはどうすればよいですか? 現在、「a」パラメーターのみが削除されます。また、「b」パラメーターも削除したいと思います。

編集: もちろん、「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]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 では、上記のように別の正規表現で実行する方がはるかに簡単でコンパクトです (反復が少なくなります)。

于 2013-08-20T15:58:30.983 に答える