2012-04-12 50 views
4

我有以下的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中使用?

回答

0

那麼它是不是正則表達式,但你可以只是做

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

0

這樣的事情應該工作。

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

4

雖然你可以使用正則表達式來做到這一點,但如果你使用非正則表達式的方法,它可能會更容易和/或更一致。這是因爲查詢字符串可能有各種各樣的佈局( 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

17

我想出了這一點:

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

1

剛剛嘗試這一點。

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