简单JavaScript URL路由正则表达式
我正在尝试编写一个非常基本的URL路由器。我定义了一个“routes”对象,其中包含位置路径和相应的“模块名” 在一个完整的页面加载之后(在这个场景中不需要hash或pushState),我想查看路由并找到相应的模块值(如果存在) 我的代码有点问题简单JavaScript URL路由正则表达式,javascript,regex,url,routing,Javascript,Regex,Url,Routing,我正在尝试编写一个非常基本的URL路由器。我定义了一个“routes”对象,其中包含位置路径和相应的“模块名” 在一个完整的页面加载之后(在这个场景中不需要hash或pushState),我想查看路由并找到相应的模块值(如果存在) 我的代码有点问题 (function() { return { routes: { '/': 'home', '/about': 'about', '/about/te
(function() {
return {
routes: {
'/': 'home',
'/about': 'about',
'/about/team': 'aboutTeam',
'/about/team/:member': 'aboutMember'
},
init: function() {
var url = location.pathname;
for (var route in this.routes) {
if (this.routes.hasOwnProperty(route)) {
if (url.match(this.regex(route))) {
// return & load module
}
}
}
},
regex: function(route) {
return new RegExp(route.replace(/:[^\s/]+/g, '([\\w-]+)'));
}
}.init();
})();
上面的代码根本不能正常工作。(显然)在本例中,登录页面/about/team/jim将返回所有四条预定义的路由。(我明白为什么,只是在努力寻找解决方案。)
我对正则表达式不太在行。我从这里钓到了上面的东西:。我在寻求建议和指导。总的来说,我是否采取了正确的方法?
console.clear();
(功能(){
var routes={//初始配置
“/”:“家”,
“/about”:“about”,
“/about/team”:“aboutTeam”,
“/about/team/:member”:“aboutMember”
};
//解析并重新创建配置以供使用
路由=对象。键(路由)
//先对最长路径排序
.sort(函数(a,b){返回b.length-a.length;})
//转换成更有用的格式
.map(函数(路径){
返回{
//创建正则表达式
路径:新的RegExp(“^”+path.replace(/:[^\s/]+/g'([\\w-]+))+“$”,
模块:路由[路径]
};
});
//==[{path://^\/about\/team\//:([\w-]+)$/,模块:“aboutMember”},…]
//用于测试的假url
var url=“/about/team/jim”;
//环行所有路线,最长优先
对于(var i=0,l=routes.length;i })();代码>您可能感兴趣。我给这个图书馆编了代码
const app = frontexpress();
app.get('/', (req, res) => {});
app.get('/about', (req, res) => {});
app.get('/about/team', (req, res) => {});
app.get('/about/team/:member', (req, res) => {
const member = req.params.member;
// your front-end logic here
});
app.listen();
更多的代码示例应该以相反的顺序迭代路由,并在第一个循环中中断match@Himmel-否,new RegExp()
接受一个字符串参数并返回一个regex对象。可选参数呢?喜欢/关于/团队/:成员?