Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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路由正则表达式脚本_Javascript_Ajax_Regex_Router - Fatal编程技术网

Javascript路由正则表达式脚本

Javascript路由正则表达式脚本,javascript,ajax,regex,router,Javascript,Ajax,Regex,Router,我正在开发一个Javascript路由器,比如主干网、Sammy、Spin。但我的要求很简单。我们应该能够给它一组路由和它们相应的回调,并且我们应该能够根据请求处理浏览器的URL 如何将:id替换为仅使用数字,将:slug替换为普通slug 我写了这段代码: core.route = function(route, options, callback) { var url = options.hash; var route_segments = route.split('/').

我正在开发一个Javascript路由器,比如主干网、Sammy、Spin。但我的要求很简单。我们应该能够给它一组路由和它们相应的回调,并且我们应该能够根据请求处理浏览器的URL

如何将:id替换为仅使用数字,将:slug替换为普通slug

我写了这段代码:

core.route = function(route, options, callback) {
    var url = options.hash;
    var route_segments = route.split('/').length-1;
    var hash_segments = url.split('/').length-1;
    var route_matcher = new RegExp(route.replace(/:[^\/]+/g, '([\\w-]+)'));
    if (url.match(route_matcher)) {
        if (route_segments === hash_segments){
            callback();
        }
    }
};


core.route('/work/:slug/:id/', options, function() {
    alert("work/example/id");
});

core.route('/work/:id/', options, function() {
    alert("work/id/");
});

你必须先定义一个鼻涕虫是什么样子的。但是
\d+
匹配正则表达式中的数字字符串,因此您可以尝试以下方法:

core.route('/work/:slug/(\\d+)/', options, function() {
//...
core.route('/work/(\\d+)/', options, function() {
//...

为什么不先看看主干网的路由实现,然后再考虑一下真正需要什么呢?这应该是可能的,您也可能会发现:


如果您定义了什么是常见的slug,可能会有所帮助。请提供示例输入和预期输出,非常感谢!但是我需要应用这个正则表达式规则:/^(?[0-9]*$)[a-z0-9-]+$/谢谢,我自己用这个代码解决了它:var route_regex=new RegExp(route.replace(/:[name]+/g'([\\a-z-]+)。replace(/:[id]+/g'([\\d]+));