Hier ist eine rekursive Lösung, die keine Regex verwendet und minimale Mutationen aufweist (nur das params-Objekt wird mutiert, was ich in JS für unvermeidbar halte).
Es ist großartig, weil es:
- Rekursiv ist
- Mit mehreren Parametern desselben Namens umgehen kann
- Gut mit fehlerhaften Parameterzeichenfolgen umgehen kann (fehlende Werte, usw.)
- Nicht kaputt geht, wenn '=' im Wert vorhanden ist
- URL-Dekodierung durchführt
- Und schließlich, es ist großartig, weil es...argh!!!
Code:
var get_params = function(search_string) {
var parse = function(params, pairs) {
var pair = pairs[0];
var parts = pair.split('=');
var key = decodeURIComponent(parts[0]);
var value = decodeURIComponent(parts.slice(1).join('='));
// Mit mehreren Parametern desselben Namens umgehen
if (typeof params[key] === "undefined") {
params[key] = value;
} else {
params[key] = [].concat(params[key], value);
}
return pairs.length == 1 ? params : parse(params, pairs.slice(1))
}
// Führt das führende ? weg
return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}
var params = get_params(location.search);
// Schließlich, um den gewünschten Parameter zu erhalten
params['c'];
9 Stimmen
Bevor Sie eine neue Antwort posten, bedenken Sie bitte, dass es bereits 50+ Antworten auf diese Frage gibt. Stellen Sie bitte sicher, dass Ihre Antwort Informationen enthält, die nicht unter den vorhandenen Antworten zu finden sind.
0 Stimmen
Var url_string = "example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; //window.location.href var url = new URL(url_string); var c = url.searchParams.get("c"); console.log(c);
1 Stimmen
Es ist verrückt, dass eine, was sollte sein, einfache Frage für JS 50+ Antworten erfordert :/