Ich versuche, eine sehr einfache URL-Router zu schreiben. Ich definiere ein "Routen" -Objekt, das Standortpfade und entsprechende "Modulnamen" enthält.Einfache JavaScript URL Routing RegEx
Nach einem vollständigen Laden der Seite (kein Hash oder PushState in diesem Szenario benötigt), möchte ich die Routen anzeigen und den entsprechenden Modulwert finden, wenn es existiert.
Ich habe Probleme mit meinem Code.
(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();
})();
Der obige Code funktioniert überhaupt nicht gut. (Offensichtlich.) Landung auf der Seite /about/team/jim wird alle vier vordefinierten Routen in diesem Beispiel zurückgeben. (Und ich kann sehen, warum, nur mit einer Lösung zu kämpfen.)
Ich bin nicht gut mit regulären Ausdrücken. Ich habe das, was ich oben habe von hier gefangen: Javascript routing regex. Ich suche Rat und Anleitung. Nehme ich insgesamt überhaupt den richtigen Weg?
Die Routen sollten in umgekehrter Reihenfolge durchlaufen werden, und brechen aus der Schleife beim ersten Spiel –
@Himmel - Nein, 'neuer RegExp()' nimmt ein String-Argument und Gibt ein Regex-Objekt zurück. – nnnnnn