1

我正在开发像 Backbone、Sammy、Spin 这样的 Javascript 路由器。但是我的要求很简单。我们应该能够给它一组路由及其相应的回调,并且我们应该能够根据请求处理浏览器 URL。

我如何替换 :id 只使用数字, :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/");
});
4

2 回答 2

0

你为什么不看看 Backbone 的路由实现,然后试着找出你真正需要的东西呢?这应该是可能的,你也可以在那里找到使用过的正则表达式

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

于 2012-10-05T21:30:39.003 回答
0

您必须首先定义蛞蝓的外观。但是\d+匹配正则表达式中的数字字符串,所以你可以试试这个:

core.route('/work/:slug/(\\d+)/', options, function() {
//...
core.route('/work/(\\d+)/', options, function() {
//...
于 2012-10-05T21:11:46.140 回答