У меня была та же проблема, но это было вызвано хранимой процедурой, в которой я объявлял переменную типа Char (36)
и MySql (я предполагаю, что Connector) интерпретировал это как GUID. Таким образом, изменив его размер до 37 (или что-то еще), он сработал.
/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 предоставляет собственный способ получения значений для других браузеров.
здесь полная функция (проверена и исправлена для верхнего / нижнего регистра)
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, " "));
}
Улучшение предыдущих ответов:
/**
*
* @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
?name=
и I just i> то, что произойдет после name=
и до &
– Trip
12 April 2012 в 16:42
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'
Принимаемый ответ включает хеш-часть, если есть хеш сразу после params. Поскольку @bishoy имеет в своей функции правильное регулярное выражение
/name=([^&#]*)/
name=
, я хочу только, что появится послеname=
и перед&
– Trip 12 April 2012 в 16:41RegExp.$1
– vol7ron 12 April 2012 в 16:42matches
ничего не соответствует, оно будет равно null. – vol7ron 12 April 2012 в 17:03name=J&name=K
. Даже если есть только один, я все равно помещаю его в массив, чтобы я мог обрабатывать результаты одинаково. Примерfor (var n=params['name'].length;n--){ /*... do something with params['name'][n] ... */ }
, который будет терпеть неудачу, если ключ никогда не существовал вообще. – vol7ron 12 April 2012 в 17:14