2013-01-21 37 views
0

我正在寫一個路由器,它將解析URL並重定向到代碼中的必要組件,當我更改我的url並傳遞對象id時,我想使用正則表達式解析它並路由它通過ID獲取該對象。解析url使用javascript正則表達式得到id

mysite.com/blah#path=folder/?folderId=klafjlka 

如何使用正則表達式javscript和路線到該文件夾​​

解析這個網址參照骨幹,我想寫這確實這是一個代碼,但我不使用骨幹

routes : { "folder/:id" : "handler" }, 
+0

[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – epascarello

+0

到目前爲止我已經能夠路由靜態URL,例如/ albumList但我真的不知道如何爲傳遞參數的動態URL編寫條件 – sublime

回答

1

我傾向於發現使用.split通常會在這些情況下創建更多可讀代碼。

如果使用window.location.hash到最初讓你的數據,你會留下

#path=folder/?folderId=klafjlka 

省去了第一批的聯合國需要的東西。剩下的事情可以簡單地通過拆分和循環拆分來完成。

//Remove the initial hash from the window.location.hash 
var hash = window.location.hash.substr(1), 
    //Split it down so we have ["path=folder","folderId=klafjlka"] 
    paramSplit = hash.split("/?"); 

var params = {}; 
for (var x=0; x<paramSplit.length; x++){ 
    //Split it at the equals 
    var split = paramSplit[x].split("="); 
    params[split[0]]=split[1]; 
} 

console.log(params); 

PARAMS應該返回

{ 
    path: "folder", 
    folderId: "klafjlka" 
} 

這是很容易使用無論你的目的是。

0

如果您的網址是一個字符串,始終相同的結構

var url = 'mysite.com/blah#path=folder/?folderId=klafjlka'; 
var re = /#path=(.+?)\?folderId=(.*)/i 
var args = url.match(re); 
var path = args[1]; 
var id = args[2]; 

這個S獲取#path=並捕獲以下字符,直到?,然後搜索?folderId=並捕獲其他所有內容。

現在path將包含folder/id將包含klafjlka