添加参数或替换值(如果找到)

时间:2016-10-04 15:33:08

标签: javascript regex replace

我正在尝试使用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

我不知道即使只有一个正则表达式可以实现这一点。

1 个答案:

答案 0 :(得分:0)

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

(跳过任意数量的其他参数,选择所需的一个或全部)