regEx для получения значения параметра из строки URL [duplicate]

У меня была та же проблема, но это было вызвано хранимой процедурой, в которой я объявлял переменную типа Char (36) и MySql (я предполагаю, что Connector) интерпретировал это как GUID. Таким образом, изменив его размер до 37 (или что-то еще), он сработал.

18
задан Trip 12 April 2012 в 16:57
поделиться

6 ответов

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

Обновить

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

42
ответ дан vol7ron 16 August 2018 в 02:50
поделиться
  • 1
    Это фиксирует name=, я хочу только, что появится после name= и перед & – Trip 12 April 2012 в 16:41
  • 2
    Покажите остальную часть кода. Если вы назначите его массиву, массив будет содержать совпадения, в противном случае вам придется использовать RegExp.$1 – vol7ron 12 April 2012 в 16:42
  • 3
    Ах, мои извинения, vol7ron. : D Ужасно жаль. Я пытаюсь сделать замену. Я уточню свой вопрос. – Trip 12 April 2012 в 16:56
  • 4
    @Trip: укажите пример соответствия для назначения. Обратите внимание, что если matches ничего не соответствует, оно будет равно null. – vol7ron 12 April 2012 в 17:03
  • 5
    Функция может быть переполнена, но она необходима, если у вас есть повторяющиеся ключи, например name=J&name=K. Даже если есть только один, я все равно помещаю его в массив, чтобы я мог обрабатывать результаты одинаково. Пример for (var n=params['name'].length;n--){ /*... do something with params['name'][n] ... */ }, который будет терпеть неудачу, если ключ никогда не существовал вообще. – vol7ron 12 April 2012 в 17:14

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

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 16 August 2018 в 02:50
поделиться

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

/**
 *
 * @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 
6
ответ дан cruzanmo 16 August 2018 в 02:50
поделиться

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

\?name=(.*?)&
3
ответ дан Karl Barker 16 August 2018 в 02:50
поделиться
  • 1
    Хм, это фиксирует ?name= и I just то, что произойдет после name= и до & – Trip 12 April 2012 в 16:42
  • 2
    @Trip Итак, используйте первую группу захвата ... – user 12 April 2012 в 16:44
  • 3
    @pst. Я еще не мастер RegEx. :( Вы имеете в виду переменные типа $ 1 или $ 2? Я думаю, что этот пример возвращает только одну группу – Trip 12 April 2012 в 16:45
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'
1
ответ дан Phil H 16 August 2018 в 02:50
поделиться

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

/name=([^&#]*)/
4
ответ дан William Neely 16 August 2018 в 02:50
поделиться
Другие вопросы по тегам:

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