Javascript路由正则表达式脚本

时间:2012-10-05 20:54:48

标签: javascript ajax regex router

我正在使用像Backbone,Sammy,Spin这样的Javascript路由器。但我的要求很简单。我们应该能够为它提供一组路由及其相应的回调,我们应该能够根据请求处理浏览器URL。

我如何更换:仅用于处理数字的id和用于常见slu g的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/");
});

2 个答案:

答案 0 :(得分:0)

你必须首先定义一个slug的样子。但是\d+匹配正则表达式中的数字字符串,所以你可以试试这个:

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

答案 1 :(得分:0)

为什么不看看Backbone的路由实现,然后你试着去除你真正需要的东西?这应该是可能的,你也可以在那里找到the used regex

https://github.com/documentcloud/backbone/blob/master/backbone.js#L894