我想寫一個非常基本的URL路由器。我定義了一個包含位置路徑和相應的「模塊名稱」的「路線」對象。簡單的JavaScript URL路由正則表達式
在完整頁面加載(本場景中不需要散列或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將在此示例中返回全部四個預定義路線。 (我可以看到爲什麼,只是努力解決方案。)
我不擅長正則表達式。我從這裏獲取了上面的內容:Javascript routing regex。我正在尋求建議和指導。我是否總是採取正確的方法?
的路線應以相反的順序進行迭代,並在第一場比賽 –
@Himmel打破循環 - 不,'新的RegExp()'需要一個字符串參數和返回一個正則表達式對象。 – nnnnnn