从url查询字符串获取具体的值

问题描述:

我有以下的URL,我想从它使用JavaScript获得“id”值。从url查询字符串获取具体的值

https://www.blabla.com/ebookedit?id=B0077RQGX4&commit=Go

我开始使用此代码:

var url = document.URL; 
var id_check = /^\id...\E; // NOT SURE HERE 
var final_id = new RegExp(id_check,url); 

我想提取id为“B0077RQGX4”,并将其保存到,我会在以后修改的变量。我该怎么做,哪些功能我会在JavaScript中使用?

那么它是不是正则表达式,但你可以只是做

id=url.split('id=')[1].split('&')[0]; 
+1

这假定'id'始终是第一个参数。 – kafuchau 2012-04-12 15:30:18

+0

@kafuchau感谢您指出了这一点。 – qw3n 2012-04-12 15:33:44

这样的事情应该工作。

var url = document.URL; 
var regex = new RegExp("id=(.+)&"); 

var id = url.match(regex)[1];​​​​​​ 

示例jsfiddle here

+1

这假定“id”不是查询字符串中的最后一个*条目。 – TLS 2012-04-12 15:45:30

+0

嗯。阿德里安娜的正则表达式更好。 – kafuchau 2012-04-12 16:02:41

虽然你可以使用正则表达式来做到这一点,但如果你使用非正则表达式的方法,它可能会更容易和/或更一致。这是因为查询字符串可能有各种各样的布局( id值首先,最后或中间)。

编辑: @AdrianaVillafañe证明这可以用一个正则表达式轻松完成!我将在此留下此JS-only方法,因为它确实有效。

我喜欢使用此JavaScript方法从URL解析查询字符串并获取与所需名称匹配的第一个值。在你的情况下,“ID”将是name参数。

// parses the query string provided and returns the value 
function GetQueryVariable(query, name) { 
    if (query.indexOf("?") == 0) { query = query.substr(1); } 
    var pairs = query.split("&"); 
    for (var i = 0; i < pairs.length; i++) { 
     var pair = pairs[i].split("="); 
     if (pair[0] == name) { 
      return pair[1]; 
     } 
    } 
    return ""; 
} 

要使用此方法,您需要传入URL的查询字符串部分和要获取的值的名称。如果要分析当前请求的URL,你可以这样做:

var value = GetQueryVariable(location.search, "id"); 

试图做到这一点的正则表达式将最有可能是不一致的,充其量试图处理的查询字符串的可能的变化时,布局。

+0

RegExps非常有趣!但是你的方法绝对是更安全的方法。 +1 – kafuchau 2012-04-12 15:54:41

+0

我尝试了一段时间(几个月前)制定一个单一的正则表达式,会做这个动作,但我最终的结论是,这种多线JS功能将更加一致(和实际上工作!)。一定要接受可以帮助您解决问题的最佳答案。 – TLS 2012-04-12 15:57:15

+0

@TLS如果需要保证你可以做类似的事情,但是返回一个对象,它可以很容易地将所有的数据作为属性和值对。分开'&',然后在'='上循环分割。 – qw3n 2012-04-12 15:57:47

我想出了这一点:

var final_id; 
var url = document.URL; 
var id_check = /[?&]id=([^&]+)/i; 
var match = id_check.exec(url); 
if (match != null) { 
    final_id = match[1]; 
} else { 
    final_id = ""; 
} 

作品为:

https://www.blabla.com/ebookedit?id=B0077RQGX4&commit=Go 
final_id = 'B0077RQGX4' 

https://www.blabla.com/ebookedit?SomethingElse=Something&id=B0077RQGX4&commit=Go 
final_id = 'B0077RQGX4' 

https://www.blabla.com/ebookedit?commit=go&id=B0077RQGX4 
final_id = 'B0077RQGX4' 

https://www.blabla.com/ebookedit?commit=Go 
final_id = '' 

https://www.blabla.com/ebookedit?id=1234&Something=1&id=B0077RQGX4&commit=Go 
final_id = '1234' 
+1

不错的工作,阿德里安娜! +1 – kafuchau 2012-04-12 16:02:12

+0

谢谢!!!!! – 2012-04-12 16:14:32

+0

使用此方法时,查询字符串中多次出现“id”会发生什么情况? – TLS 2012-04-12 16:14:43

刚刚尝试这一点。

function getUrlVars() 
{ 
    var vars = {}; 
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) 
    { 
    vars[key] = value; 
    }); 
    return vars; 
} 


function urlval() 
{ 
    var x=getUrlVars()["id"]; 
    alert (x); 
} 

现在x将在ID给值B0077RQGX4