web-dev-qa-db-ger.com

Wert aus Abfragezeichenfolge mit Regex erfassen?

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.

25
Trip

/name=([^&]*)/

  • entferne den ^ 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'];

Aktualisieren

Obwohl RLSearchParams in keiner IE-Version unterstützt wird, bietet es eine systemeigene Möglichkeit, Werte für andere Browser abzurufen.

58
vol7ron

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 
7
cruzanmo

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=([^&#]*)/
5
William Neely

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, " "));
}
3
Bishoy Hanna

Folgendes sollte funktionieren:

\?name=(.*?)&
3
Karl Barker
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'
1
Phil H