2011-04-26 19 views

回答

4

您可以使用一個正則表達式做到這一點:

var reg = /^#\/projects\/(\d+)(?:\/tasks\/(\d+))?$/, 
    str = "#/projects/11/tasks/22", 
    match = str.match(reg); 

if (match && !match[2]) 
    // Match on string 1 
else if (match && match[2]) 
    // Match on string 2 
else 
    // No match 

我寫的表達式使用子表達式來捕捉數字;結果將是一個數組,看起來像這樣:

"#/projects/11/tasks/22".match(reg); 
//-> ["#/projects/11/tasks/22", "11", "22"] 

"#/projects/11".match(reg); 
//-> ["#/projects/11", "11", undefined] 

有許多正則表達式在線教程,這將有助於您瞭解如何解決這樣一個問題 - 我建議這樣的教程谷歌搜索。

+0

謝謝!和藹 – AnApprentice 2011-04-26 22:32:29

0

這裏有一個更靈活的方式,你可以使用其他URL太http://jsfiddle.net/EXRXE/

/* 
    in: "#/cat/34/item/24" 

    out: { 
    cat: "34", 
    item: "24" 
    } 
*/ 

function translateUrl(url) { 
    // strip everytying from the beginning that's not a character 
    url = url.replace(/^[^a-zA-Z]*/, ""); 
    var parts = url.split("/"); 
    var obj = {}; 
    for(var i=0; i < parts.length; i+=2) { 
    obj[parts[i]] = parts[i+1] 
    } 
    return obj; 
} 

var url = translateUrl('#/projects/11/tasks/22'); 
console.log(url); 

if (url.projects) { 
    console.log("Project is " + url.projects); 
} 

if (url.tasks) { 
    console.log("Task is " + url.tasks); 
} 
相關問題