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

How to determine if a string matches a pattern type

本文关键字:类型 模式 何确定 字符串 是否      更新时间:2023-09-26

给定以下模式类型:其中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]

网上有很多正则表达式教程可以帮助你理解如何解决这样的问题,我建议你在谷歌上搜索这样的教程。

我会亲自研究Regex,因为它很容易设置模式并测试字符串是否适用于它。试试这个: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);
}