我正在使用像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/");
});
答案 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