利用正则表达式获取 url 中的参数

获取 url 中的某个参数

获取 url 参数最便捷的方法当然是用正则表达式,废话不多说,直接上码:

1
2
3
4
5
6
7
8
9
10
function getUrlParam(par){
var reg = new RegExp("(^|&)" + par + "=([^&]*)(&|$)");
var result = window.location.search.substr(1).match(reg)[2];

if (result && result[2]) {
return result[2];
}

return false;
}

假如我们想获得下面地址的 id 参数值:

http://127.0.0.1/test.html?id=myId&name=myName

调用该方法即可。

1
var id = getUrlParam('id');

返回结果:

1
myId

正则表达式解析

在这个例子中,正则表达式为:

1
(^|&)id=([^&]*)(&|$)

(1) 参数通常在开头(^)或以 & 进行连接
(^|&)

(2) 属性值设定
([^&]*)

[^] 代表匹配未在方括号中指定的字符。添加 &,这样,该正则表达式匹配任何非 & 字符。* 代表出现 0 次或多次,因此只要不出现 &,均被认为是属性值的一部分。

(3) 以 & 作为结束或遇到结尾 ($)
(&|$)

window.location.search.substr(1) 是 url 当中的参数部分。

调用方法的返回结果为:

1
["id=myId&", "", "myId", "&", index: 0, input: "id=myId&name=myName"]

取数组中第三个值即可。

将所有参数转换为对象类型

1
2
3
4
5
6
7
8
9
10
11
var parseQueryString = function (param) {
var regExp = /([^&=]+)=([\w\W]*?)(&|$)/g;

while ((result = regExp.exec(param)) != null) {
ret[result[1]] = result[2];
}
return ret;
}

var param = location.search.slice(1);
obj = parseQueryString(param);

使用 http://127.0.0.1/test.html?id=myId&name=myName 地址进行检测,得到的返回值为:

1
2
3
4
{
id: "myId",
name: "myName"
}