Я пытаюсь написать очень простой URL-адрес маршрутизатора. Я определяю объект «маршруты», который содержит пути местоположения и соответствующие «имена модулей».Simple JavaScript URL Routing RegEx
При полной загрузке страницы (в этом случае не требуется хэш или 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