Подтвердить что ты не робот

Захват значения из строки запроса с регулярным выражением?

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

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

До сих пор я..

^name=(.*?).

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

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

4b9b3361

Ответ 1

/name=([^&]*)/

  • удалите ^ и закончите с &

Пример:

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 обеспечивает собственный способ получения значений для других браузеров.

Ответ 2

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

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

Ответ 3

Улучшение предыдущих ответов:

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

Ответ 4

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

\?name=(.*?)&

Ответ 5

здесь полная функция (проверенная и исправленная для верхнего/нижнего регистра)

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

Ответ 6

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'