Parsing ist nicht schön. Linguisten mögen da feuchte Hände bekommen. Als Javascript Entwickler kriege ich da nur dieses unangenehme Kribbeln. Denn ich weiss, i.d.R. halte ich direkt auf die Regex-Hölle zu. Das ist immer dann um so nerviger, wenn es um ganz alltägliche Dinge geht. Um das Zerhacken einer URI beispielsweise.
Wie das aussehen kann, zeigt der werte Kollege Steven Levithan ganz eindrucksvoll. Der geneigte Leser merkt schnell, dass er so gar keine Probleme mit Regexen hat. Auszug gefällig?
parseUri.options = { strictMode: false, key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], q: { name: "queryKey", parser: /(?:^|&)([^&=]*)=?([^&]*)/g }, parser: { strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ } };
Da kommt Freude auf. Abgesehen davon ist die Funktion verdammt gut, weil sie cross-browser-tauglich ist, Credentials erkennt und auch ausserhalb von DOM-Umgebungen wie Node.js prima funktioniert. Viel hilft viel.
Wenn´s aber auch etwas weniger sein darf, hier ein Quicky für das Web-Frontend (via):
var parser = document.createElement('a'); parser.href = "http://example.com:3000/pathname/?query=test#hash"; parser.protocol; // => "http:" parser.hostname; // => "example.com" parser.port; // => "3000" parser.pathname; // => "/pathname/" parser.search; // => "?query=test" parser.hash; // => "#hash" parser.host; // => "example.com:3000"
Ist Javascript nicht wunderschön? *schluchz*