Ich versuche zu wählen, was hinter name=
und vor dem &
in kommt:
"/pages/new?name=J&return_url=/page/new"
Bisher habe ich ..
^name=(.*?).
Ich versuche in diesem Fall nur die Variable J
zurückzugeben, aber ihre Dynamik kann daher aus mehreren Zeichen, Buchstaben oder Zahlen bestehen.
Die Endfallsituation würde es mir erlauben, eine replace
-Anweisung für diese dynamische Variable auszuführen, die mit regex gefunden wurde.
/name=([^&]*)/
^
und beende mit einem &
Beispiel:
var str = "/pages/new?name=J&return_url=/page/new";
var matches = str.match(/name=([^&]*)/);
alert(matches[1]);
Der bessere Weg ist, alle Parameter aufzuschlüsseln (Beispiel mit aktueller Adresse):
function getParams (str) {
var queryString = str || window.location.search || '';
var keyValPairs = [];
var params = {};
queryString = queryString.replace(/.*?\?/,"");
if (queryString.length)
{
keyValPairs = queryString.split('&');
for (pairNum in keyValPairs)
{
var key = keyValPairs[pairNum].split('=')[0];
if (!key.length) continue;
if (typeof params[key] === 'undefined')
params[key] = [];
params[key].Push(keyValPairs[pairNum].split('=')[1]);
}
}
return params;
}
var url = "/pages/new?name=L&return_url=/page/new";
var params = getParams(url);
params['name'];
Obwohl RLSearchParams in keiner IE-Version unterstützt wird, bietet es eine systemeigene Möglichkeit, Werte für andere Browser abzurufen.
Frühere Antworten verbessern:
/**
*
* @param {string} name
* @returns {string|null}
*/
function getQueryParam(name) {
var q = window.location.search.match(new RegExp('[?&]' + name + '=([^&#]*)'));
return q && q[1];
}
getQueryParam('a'); // returns '1' on page http://domain.com/page.html?a=1&b=2
Die akzeptierte Antwort beinhaltet den Hash-Teil, wenn nach den Parametern ein Hash steht. Wie @bishoy in seiner Funktion hat, wäre der korrekte Regex
/name=([^&#]*)/
hier ist die volle Funktion (getestet und fixiert für Groß-/Kleinschreibung)
function getParameterByName (name)
{
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name.toLowerCase() + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(window.location.search.toLowerCase());
if (results == null)
return "";
else
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
Folgendes sollte funktionieren:
\?name=(.*?)&
var myname = str.match(/\?name=([^&]+)&/)[1];
Die [1] ist, weil Sie anscheinend den Wert der Gruppe wollen (den Teil des Regex in Klammern).
var str = "/pages/new?name=reaojr&return_url=/page/new";
var matchobj = str.match(/\?name=([^&]+)&/)[1];
document.writeln(matchobj); // prints 'reaojr'