我正在使用自定义 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}
设为可选?有没有一种简单的方法可以将结果数组转换为对象?
感谢您的帮助!
最佳答案
尝试这个正则表达式
^(browser:\/)(\/([\w\d]+)){2,4}$
在 regexpal 上测试
如果您允许尾随斜杠,您可以尝试此操作
^(browser:\/\/)(([\w\d]+)\/){2,4}$
如果您需要利用 javascript 正则表达式引擎为您提取匹配的元素,或者使用更复杂的正则表达式
^(browser:\/\/)(([\w\d]+)\/)(([\w\d]+)\/)(([\w\d]+)\/)?(([\w\d]+)\/)?$
关于javascript - 如何使用正则表达式将 url 路径与可选元素进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16984059/