我的正则表达式相当差,希望能在这里得到一些帮助。 我有一个带有查询字符串参数的网址。该参数又是本身具有qs参数的url。 例如:我的网址是
现在,当我使用任何函数来提取整个查询字符串参数时,我都会以某种方式仅获得第一个。
我期望的是: / 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参数。他们似乎都无法应付这种情况答案 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()