Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单JavaScript URL路由正则表达式_Javascript_Regex_Url_Routing - Fatal编程技术网

简单JavaScript URL路由正则表达式

简单JavaScript URL路由正则表达式,javascript,regex,url,routing,Javascript,Regex,Url,Routing,我正在尝试编写一个非常基本的URL路由器。我定义了一个“routes”对象,其中包含位置路径和相应的“模块名” 在一个完整的页面加载之后(在这个场景中不需要hash或pushState),我想查看路由并找到相应的模块值(如果存在) 我的代码有点问题 (function() { return { routes: { '/': 'home', '/about': 'about', '/about/te

我正在尝试编写一个非常基本的URL路由器。我定义了一个“routes”对象,其中包含位置路径和相应的“模块名”

在一个完整的页面加载之后(在这个场景中不需要hash或pushState),我想查看路由并找到相应的模块值(如果存在)

我的代码有点问题

(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对象。可选参数呢?喜欢/关于/团队/:成员?