2016-04-03 51 views
1

給定一個網址,我試圖刪除一個特定的URL參數。刪除網址參數與正則表達式

舉例來說,如果我有:

http://example.com?foo=bar&baz=boo 

,我想擺脫foo=bar,並會留下:

http://example.com?baz=boo 

或者,如果我想刪除baz=boo我會留下:

http://example.com?foo=bar 

我想使用正則表達式以及字符串的replace功能。

這是我有:

// s is "foo" 
new RegExp("([&?]+)" + s + "=.*&") 

它不工作的情況下:

http://example.com?foo=bar 

,因爲它不是匹配&,但我無法弄清楚如何製作的正則表達式來處理這兩種情況。

jsBin

+0

如果只有'foo = bar',你想'''剩下嗎?如果你想追加一些東西。 – 2016-04-03 19:56:53

+0

@noob我想我寧願它不見了 –

回答

1

Working fiddle

我認爲你在尋找什麼,使用組來處理這兩種情況下有&,沒有它:

"([&?]+)" + s + "=(.*&|.*$)?" 

編輯: Update fiddle

您可以添加?如果你想停止的&第一次出現(如果存在的話):

"([&?]+)" + s + "=(.*?&|.*$)?" 
_____________________^ 

希望這有助於。

+1

非常接近,但如果有''http://example.com?foo = bar&baz = boo&fliz = flap'三個參數,並且您刪除了'foo = bar',那麼'&'是貪婪的,並且會刪除'baz = boo'。這是否意味着需要積極的預見? –

+0

已修復,請檢查我的更新。 –

1

([&?]+)foo=.*?(?:&|$)應該工作。

我改變

  • .*?修復貪的問題。
  • (?:&|$)是一個非捕獲組。它匹配&或匹配行結束(與$)。
+0

你是否考慮過'baz = boo'的情況,因爲它似乎沒有爲它工作。 – 2016-04-03 20:11:23

+0

非捕獲組似乎一直捕獲到行尾(https://regex101.com/r/eZ5lT1/1)。你知道如何使它不貪婪? –

+0

@ Jonathan.Brink固定(問題在於你寫的部分,FYI。) – Laurel

1
str = str.replace(/(?:\?|&)(foo[^=]*=[^&]+)(?:&|$)/,''); 

DEMO