如何确定字符串是否与模式类型匹配

时间:2011-04-26 22:16:37

标签: javascript jquery regex

给出以下模式类型:其中11和22是变量:

#/projects/11
#/projects/11/tasks/22

使用Javascript / jQuery,给定var url,我如何确定var url是否等于字符串1,2或两者都没有?

由于

3 个答案:

答案 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);
}