2011-04-26 3 views

Répondre

4

Vous pouvez le faire en utilisant une seule expression régulière:

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 

L'expression que j'ai écrit utilise des sous-expressions pour capturer les chiffres; le résultat serait un tableau qui ressemble à ceci:

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

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

Il y a de nombreux tutoriels d'expression régulière en ligne qui vous aidera à comprendre comment résoudre les problèmes comme celui-ci - je recommande la recherche Google pour un tel tutoriel.

+0

Merci! gentiment – AnApprentice

0

est ici une approche plus souple que vous pouvez utiliser pour d'autres urls trop 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); 
} 
Questions connexes