Javascript依次获取具有查询字符串参数的查询字符串参数值

时间:2018-08-20 21:17:07

标签: javascript jquery query-string

我的正则表达式相当差,希望能在这里得到一些帮助。 我有一个带有查询字符串参数的网址。该参数又是本身具有qs参数的url。 例如:我的网址是

  

http://myurl.com/somepage?ref=/en-us/products-overview/find-product/home/kitchen/2980?source=google&isadvertisement=false&organic=true

现在,当我使用任何函数来提取整个查询字符串参数时,我都会以某种方式仅获得第一个。

我期望的是 / zh-cn / products-overview / find-product / home / kitchen / 2980?source = google&isadvertisement = false&organic = true

但是我得到的是: / zh-cn / products-overview / find-product / home / kitchen / 2980?source = google

请注意,其他两个参数(isadvertisement和organic)丢失了。

我的功能是

function getUrlParameter(name) {
    var url = 'http://myurl.com/somepage?ref=/en-us/products-overview/find-product/home/kitchen/2980?source=google&isadvertisement=false&organic=true';
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(url);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};

JsFiddle here

我尝试从SO提取其他链接以提取QS参数。他们似乎都无法应付这种情况

1 个答案:

答案 0 :(得分:0)

您网址中的&符号被视为顶级参数分隔符。如果它们本身是参数的一部分,则需要对其进行转义。您转义的网址看起来像http://myurl.com/somepage?ref=%2Fen-us%2Fproducts-overview%2Ffind-product%2Fhome%2Fkitchen%2F2980%3Fsource%3Dgoogle%26isadvertisement%3Dfalse%26organic%3Dtrue。 url的编码方式取决于其来源。 JS提供了spring-security.xml函数。

然后,您可以使用encodeURIComponent()将其解码回期望的URL。问题来自嵌套的查询参数。

一般来说,要获取查询参数,使用URL的内置解决方案可能类似于:

decodeURIComponent()