如何parsing一个URL查询参数,在Javascript中?

可能重复:
在javascript中使用获取参数的url
在JavaScript中获取查询string值

在Javascript中,我怎样才能得到一个URLstring(不是当前的URL)的参数?

喜欢:

www.domain.com/?v=123&p=hello 

我可以在JSON对象中获得“v”和“p”吗?

今天(这个答案后的2.5年),你可以安全地使用 Array.forEach 。 正如@ricosrealm所build议的那样,在这个函数中使用了decodeURIComponent

 function getJsonFromUrl() { var query = location.search.substr(1); var result = {}; query.split("&").forEach(function(part) { var item = part.split("="); result[item[0]] = decodeURIComponent(item[1]); }); return result; } 

其实并不是那么简单 ,在评论中看到同行评议,尤其是:

  • 基于散列的路由(@cmfolio)
  • 数组参数(@ user2368055)
  • 正确使用decodeURIComponent(@AndrewF)

也许这应该去codereview SE,但这里是更安全和正则expression式的代码:

 function getJsonFromUrl(hashBased) { var query; if(hashBased) { var pos = location.href.indexOf("?"); if(pos==-1) return []; query = location.href.substr(pos+1); } else { query = location.search.substr(1); } var result = {}; query.split("&").forEach(function(part) { if(!part) return; part = part.split("+").join(" "); // replace every + with space, regexp-free version var eq = part.indexOf("="); var key = eq>-1 ? part.substr(0,eq) : part; var val = eq>-1 ? decodeURIComponent(part.substr(eq+1)) : ""; var from = key.indexOf("["); if(from==-1) result[decodeURIComponent(key)] = val; else { var to = key.indexOf("]",from); var index = decodeURIComponent(key.substring(from+1,to)); key = decodeURIComponent(key.substring(0,from)); if(!result[key]) result[key] = []; if(!index) result[key].push(val); else result[key][index] = val; } }); return result; } 

我也根据这篇文章replace了非编码的空格, 这也是遵循RFC 3986的编码方法。

注意result[key][index] = val :创build一个新的数组项,它是可枚举的,所以它可以被forEach调用迭代。 因此,你甚至可以parsingURL

 var url = "?foo%20e[]=a%20a&foo+e[%5Bx%5D]=b&foo e[]=c"; // {"foo e": ["aa", "c", "[x]":"b"]} var obj = getJsonFromUrl(url)["foo e"]; for(var key in obj) { // Array.forEach would skip string keys here console.log(key,":",obj[key]); } /* 0 : aa 1 : c [x] : b */ 

你可以用这样的东西得到一个参数的JavaScript对象(地图):

 var regex = /[?&]([^=#]+)=([^&#]*)/g, url = window.location.href, params = {}, match; while(match = regex.exec(url)) { params[match[1]] = match[2]; } 

正则expression式很可能会得到改善。 它只是查找名称 – 值对,用=分隔,而且它们自己用&字符分隔(或者第一个字符为= )。 就你的例子而言,以上将导致:

{v: "123", p: "hello"}

这是一个工作的例子 。

 var v = window.location.getParameter('v'); var p = window.location.getParameter('p'); 

现在v和p分别是123和hello的对象