2016-10-04 3 views
0

Я пытаюсь сделать js regex, который будет искать параметр в 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 

(пропускает любое количество других параметров, выбирает требуется один или ничего)

Смежные вопросы