考慮下面的模式類型匹配:其中11和22是可變的:如何確定一個字符串的模式類型
#/projects/11
#/projects/11/tasks/22
使用Javascript/jQuery的,給予VAR URL,我怎麼能確定VAR URL等於字符串1,2還是兩者都不?
感謝
考慮下面的模式類型匹配:其中11和22是可變的:如何確定一個字符串的模式類型
#/projects/11
#/projects/11/tasks/22
使用Javascript/jQuery的,給予VAR URL,我怎麼能確定VAR URL等於字符串1,2還是兩者都不?
感謝
您可以使用一個正則表達式做到這一點:
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]
有許多正則表達式在線教程,這將有助於您瞭解如何解決這樣一個問題 - 我建議這樣的教程谷歌搜索。
我會考慮親自正則表達式,因爲它很容易建立一個模式,測試字符串適用於它。試試這個:http://www.regular-expressions.info/javascript.html
這裏有一個更靈活的方式,你可以使用其他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);
}
謝謝!和藹 – AnApprentice 2011-04-26 22:32:29