web-dev-qa-db-fra.com

Capturer la valeur de la chaîne de requête avec regex?

J'essaie de sélectionner ce qui vient après le name= et avant le & dans:

"/pages/new?name=J&return_url=/page/new"

Jusqu'ici j'ai ..

^name=(.*?).

J'essaie de revenir dans ce cas, juste la J, mais sa dynamique permet de très nombreux caractères, lettres ou chiffres.

Le cas de figure final me permettrait de faire une déclaration replace sur cette variable dynamique trouvée par regex.

25
Trip

Améliorer les réponses précédentes:

/**
 *
 * @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

La réponse acceptée inclut la partie hachage s'il y a un hachage juste après les paramètres. Comme @bishoy a dans sa fonction, la regex correcte serait

/name=([^&#]*)/
5
William Neely

voici la fonction complète (testée et corrigée pour les majuscules/minuscules)

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

Ce qui suit devrait fonctionner:

\?name=(.*?)&
3
Karl Barker
var myname = str.match(/\?name=([^&]+)&/)[1];

Le [1] est parce que vous voulez apparemment la valeur du groupe (la partie de l'expression régulière entre parenthèses).

var str = "/pages/new?name=reaojr&return_url=/page/new";
var matchobj = str.match(/\?name=([^&]+)&/)[1];
document.writeln(matchobj); // prints 'reaojr'
1
Phil H