Захватить значение из строки запроса с помощью регулярного выражения?
Я пытаюсь выбрать только то, что будет после 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, " "));
}
Вот однострочный ответ, который предотвращает необходимость хранить переменную (если вы не можете использовать URLSearchParams, потому что вы все еще поддерживаете IE)
(document.location.search.match(/[?&]name=([^&]+)/)||[null,null])[1]
Добавив ||[null,null]
и заключив его в круглые скобки, вы можете безопасно индексировать элемент 1 в массиве, не проверяя, вернулось ли совпадение с результатами. Конечно, вы можете заменить [null,null] на любое значение по умолчанию.
Вы можете получить тот же результат с помощью простого .split () в javascript .
пусть значение = url.split("name=")[1].split("&")[0];