我正在尝试选择in之后name=
和之前的内容&
:
"/pages/new?name=J&return_url=/page/new"
到目前为止我有..
^name=(.*?).
在这种情况下,我试图返回J
,但它是动态的,因此它可以有很多字符、字母或数字。
最终的情况是让我自己对replace
正则表达式找到的这个动态变量做一个声明。
我正在尝试选择in之后name=
和之前的内容&
:
"/pages/new?name=J&return_url=/page/new"
到目前为止我有..
^name=(.*?).
在这种情况下,我试图返回J
,但它是动态的,因此它可以有很多字符、字母或数字。
最终的情况是让我自己对replace
正则表达式找到的这个动态变量做一个声明。
/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提供了一种为其他浏览器检索值的本机方式。
如果参数后面有散列,则接受的答案包括散列部分。正如@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
这是完整的功能(针对大写/小写进行了测试和修复)
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=(.*?)&