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

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

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

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

^name=(.*?).

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

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

9 ответов

Решение

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

Обновить

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

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

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

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

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

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

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

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

\?name=(.*?)&

Вот однострочный ответ, который предотвращает необходимость хранить переменную (если вы не можете использовать URLSearchParams, потому что вы все еще поддерживаете IE)

(document.location.search.match(/[?&]name=([^&]+)/)||[null,null])[1]

Добавив ||[null,null]и заключив его в круглые скобки, вы можете безопасно индексировать элемент 1 в массиве, не проверяя, вернулось ли совпадение с результатами. Конечно, вы можете заменить [null,null] на любое значение по умолчанию.

Вы можете получить тот же результат с помощью простого .split () в javascript .

пусть значение = url.split("name=")[1].split("&")[0];

Это может сработать:

      \??(.*=.+)*(&.*=.+)?
Другие вопросы по тегам