簡體   English   中英

如何確定字符串是否與模式類型匹配

[英]How to determine if a string matches a pattern type

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

網上有很多正則表達式教程可以幫助你理解如何解決這樣的問題 - 我建議在Google上搜索這樣的教程。

我會親自研究一下Regex,因為很容易設置一個模式並測試一個字符串是否適用於它。 試試這個: http//www.regular-expressions.info/javascript.html

這里有一個更靈活的方法,你也可以用於其他網址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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM