2016-10-04 15 views
0

我想做一個js正則表達式,將搜索URL中的參數,如果發現替換它的值。 如果找不到參數,則會將其添加到URL中。添加參數或替換值,如果找到

這裏是一對夫婦的情況下

http://www.domain.com/?paramZ=123456 
https://www.domain.com/?param1=val1;param2=val2;param3=val3;paramZ=123456 
http://www.domain.com/one/or/more?paramZ=123456;param1=val1;param2=val2;param3=val3 
https://www.domain.com/one/or/more?param1=val1;paramZ=123456;param2=val2;param3=val3 
http://www.domain.com/one/or/more?param1=val1;param2=val2;param3=val3 

我的目標是要做到以下幾點:

  • 找到paramZ = XXXXXX,並與paramZ = YYYYYY替換
  • 如果paramZ不存在,加上它的值YYYYYY

我設法做了第一個:

搜索

/^(http[s]?:\/\/www\.domain)(.*)(paramZ\=[\d]+)(.*)$/g 

更換

$1$2paramZ=987654$4 

這裏是一個工作示例: https://regex101.com/r/9Ui8vx/1

我甚至不知道是否有可能只在一個正則表達式來達致這。

+0

爲什麼不 - > [?我怎樣才能在JavaScript查詢字符串值(http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript) – adeneo

+0

或者[添加或更新查詢字符串參數](http://stackoverflow.com/questions/5999118/add-or-update-查詢字符串參數)。 –

+0

這需要進入一個只接受搜索和替換正則表達式的系統。不幸的是,沒有編碼可以完成。 – edysoft

回答

0
/(^https?:\/\/[^?#]*\?)((?!paramZ=)\w*=\w*;?)*?((paramZ=\w*;?)?)/gm 

(跳過任意數量的其他參數,根據需要選擇一個或沒有)