给出以下模式类型:其中11和22是变量:
#/projects/11
#/projects/11/tasks/22
使用Javascript / jQuery,给定var url,我如何确定var url是否等于字符串1,2或两者都没有?
由于
答案 0 :(得分: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]
网上有很多正则表达式教程可以帮助您了解如何解决这样的问题 - 我建议您在Google上搜索此类教程。
答案 1 :(得分:0)
我会亲自研究一下Regex,因为很容易设置一个模式并测试一个字符串是否适用于它。试试这个:http://www.regular-expressions.info/javascript.html
答案 2 :(得分:0)
这是一种更灵活的方法,您可以将其用于其他网址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);
}