Zuerst auf Räume aufteilen:
var lineParts = line.split(' ');
Jetzt können Sie die Methode, unparsed Pfad erhalten, und Version:
var method = lineParts[0];
var path = lineParts[1];
var version = lineParts[2];
Sie dann kann den Pfad in die Abfragezeichenfolge und Nicht-Abfragezeichenfolge teilen:
var queryStringIndex = path.indexOf('?');
var url, queryString;
if(queryStringIndex == -1) {
url = path, queryString = '';
}else{
url = path.substring(0, queryStringIndex);
// I believe that technically the query string includes the '?',
// but that's not important for us.
queryString = path.substring(queryStringIndex + 1);
}
Wenn es eine Abfrage-String ist, können wir es dann aufgeteilt in key=value
Strings:
var queryStringParts = [];
if(queryStringIndex != -1) {
queryStringParts = queryString.split('&');
}
Dann können wir sie unescape und sie in ein Objekt stopfen:
var parameters = {};
queryStringParts.forEach(function(part) {
var equalsIndex = part.indexOf('=');
var key, value;
if(equalsIndex == -1) {
key = part, value = "";
}else{
key = part.substring(0, equalsIndex);
value = part.substring(equalsIndex + 1);
}
key = decodeURIComponent(key);
value = decodeURIComponent(value);
parameters[key] = value;
});
Wenn Sie wirklich wollte, könnten Sie dann alle diese Daten in ein Objekt:
return {
method: method,
url: url,
version: version,
parameters: parameters
};
Wenn Sie sich in einer Browserumgebung befinden, ist dies die einzige Möglichkeit. Wenn Sie Node.JS verwenden, it can deal with the URL parsing for you.
In welcher Umgebung? Der Browser? –
ja, in Javascript –
haben Sie die Zeile als JavaScript-String? – boisvert