Вопрос по regex, javascript – Захватить значение из строки запроса с помощью регулярного выражения?

26

Я пытаюсь выбрать только то, что будет послеname= и до& в :

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

Пока что у меня есть ..

^name=(.*?).

Я пытаюсь вернуться в этом случае, простоJ, но он динамический, поэтому он может очень несколько символов, букв или цифр.

Конечная ситуация позволила бы мне сделатьreplace заявление об этой динамической переменной, найденной регулярным выражением.

Что значит^ делать? Что бы помешало этому работать? user166390
возможный дубликатGet query string values in JavaScript Álvaro González
Способ перебить Альваро. И определенно не тот ответ, который я ищу. Trip

Ваш Ответ

6   ответов
3

Следующее должно работать:

\?name=(.*?)&
Error: User Rate Limit Exceeded?name=Error: User Rate Limit ExceededjustError: User Rate Limit Exceededname=Error: User Rate Limit Exceeded& Trip
Error: User Rate Limit Exceeded Trip
Error: User Rate Limit Exceeded
5

Принятый ответ включает в себя часть хеша, если есть хеш сразу после параметров. Как @bishoy имеет в своей функции, правильное регулярное выражение будет

/name=([^&#]*)/
52

/name=([^&]*)/

  • remove the ^ and end with an &

Пример:

var str     = "/pages/new?name=J&return_url=/page/new";
var matches = str.match(/name=([^&]*)/);
alert(matches[1]);

Лучший способ - разбить все параметры (пример с использованием текущего адреса):

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'];

Update

Хотя до сих пор не поддерживается ни в одной версии IE,URLSearchParams предоставляет собственный способ получения значений для других браузеров.

Error: User Rate Limit ExceededmatchesError: User Rate Limit Exceeded
Error: User Rate Limit ExceededRegExp.$1
Error: User Rate Limit Exceeded Trip
Error: User Rate Limit Exceededname=Error: User Rate Limit Exceededname=Error: User Rate Limit Exceeded& Trip
Error: User Rate Limit Exceededname=J&name=KError: User Rate Limit Exceededfor (var n=params['name'].length;n--){ /*... do something with params['name'][n] ... */ }Error: User Rate Limit Exceeded
3

гистра)

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, " "));
}
Error: User Rate Limit Exceeded Trip
7

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

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

[1] потому, что вы, очевидно, хотите значение группы (часть регулярного выражения в скобках).

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

Похожие вопросы