在javascript中替换url中的查询字符串

时间:2014-06-08 20:14:33

标签: javascript regex

我有以下两个网址:

url1 = http://localhost:8000/i/dashboard-view?
&level_to_load=1&click_value=%C2%AB%20backll%20Billing%20PartiesC2%
AB%20backll%20Billing%20Parties 

url2 = http://localhost:8000/i/dashboard-view?&level_to_load=1
&click_value=%C2%AB%20backll%20Billing%20PartiesC2%AB%20backll%20Billing%20Parties
&new_value=2

我希望能够提取包含“click_value = ...”的部分。

正则表达式之后生成的两个URL应为:

url1 = http://localhost:8000/i/dashboard-view?&level_to_load=1

url2 = http://localhost:8000/i/dashboard-view?&level_to_load=1&new_value=2

我目前的正则表达式是:

url.replace(/click_value=.+&/, '');

但显然不够。什么是正确的正则表达式?

1 个答案:

答案 0 :(得分:2)

您可以将click_value GET字符串与此正则表达式匹配:

&?click_value=[^&#\s]*

因此,要修改它们,

result = url.replace(/&?click_value=[^&#\s]*/mg, "");

<强>讨论

这里的关键是匹配正确的字符数而不是更多。我在@ ridgerunner的深刻观察中修改了原来的答案,在许多网址中,虽然可能不在你的网址中,但最后可能会有一个锚标记,从#开始,我们不会这样做想要替换。感谢他提供了改进的答案,不再使用前瞻。

<强>令牌通过令牌

&?                       # '&' (optional (matching the most amount
                         # possible))
click_value=             # 'click_value='
[^&#\s]*                 # any character except: '&', '#', whitespace
                         # (\n, \r, \t, \f, and " ") (0 or more times
                         # (matching the most amount possible))