如何使用正则表达式将URL路径与可选元素进行匹配

时间:2013-06-07 12:23:28

标签: javascript regex url path pattern-matching

我正在使用我想要映射到对象的自定义URL路径。

我的映射如下所示:

browser://{A}/{B}/{C}/{D}/

{C}{D}是可选的。所以路径可能如下所示:

"browser://call/register/ss/hello"
"browser://call/request/"

我希望路径可用作对象ala

 elems = {
   A: call,
   B: register,
   C: ss,
   D: hello
 }

但是现在我甚至无法让正则表达式工作......这就是我正在尝试的:

 var re = /^browser:\/\/([\w\W]+)[\/+]([\w\W]+)[\/+]([\w\W]*)[\/*]([\w\W]*)[\/*]/;
 console.log(re.exec("browser://call/register/ss/hello"));

如果我包含完整路径,这似乎只有效。但是当我离开{C}{D}时,我的正则表达式失败了。

问题
如何选择{C}{D}?有没有一种简单的方法将结果数组转换为对象?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用以下代码:

function toTokens(str){
  var re = /^browser:\/\/([\w\W]+)[\/+]([\w\W]+)[\/+]/;
  var tmp = re.exec(str);
  var obj = tmp[1].split("/");
  obj.push(tmp[2]);
  return obj;
}

测试用例:

console.log(toTokens("browser://{A}/{B}/"));
console.log(toTokens("browser://{A}/{B}/{C}/"));
console.log(toTokens("browser://{A}/{B}/{C}/{D}/"));

答案 1 :(得分:1)

试试这个正则表达式

^(browser:\/)(\/([\w\d]+)){2,4}$

regexpal

上进行测试

如果您允许使用尾部斜杠,可以尝试使用

^(browser:\/\/)(([\w\d]+)\/){2,4}$

如果您需要使用javascript正则表达式引擎为您提取匹配的元素,请使用更复​​杂的正则表达式

^(browser:\/\/)(([\w\d]+)\/)(([\w\d]+)\/)(([\w\d]+)\/)?(([\w\d]+)\/)?$

Fiddle