html使用正则获取url传的参数

在搭建这个博客的时候,前台一开始都使用的jsp,使用了很多<% %>,比较难看,可读性也较差,后来逐渐全部换成了ajax获取数据,这时候觉得已经没必要使用jsp了。

使用jsp后缀也导致URL链接也非常丑(个人感觉),遂把所有jsp后缀改成html。刷新页面发现报错,

<%request.getParameter("xxx")%>

因为不是jsp,所以这种方法也行不通了。
但js里面有一个方法可以获取页面的URL地址

window.location 对象所包含的属性

属性

描述

hash从井号 (#) 开始的 URL(锚)
host主机名和当前 URL 的端口号
hostname            当前 URL 的主机名
href完整的 URL
pathname当前 URL 的路径部分
port当前 URL 的端口号
protocol当前 URL 的协议
search从问号 (?) 开始的 URL(查询部分)


我们使用

window.location.search 来获取?之后的所有参数。

window.location.search.substr(1)

使用substr(1)来去掉 ? 

reg = new RegExp("(^|&)" + name + "=([^&])(&|$)", "i");

使用正则,如下图,i表示忽略大小写

var r = window.location.search.substr(1).match(reg);

匹配之后会的r为一个数组,长度为4。第一个是整个匹配的字符串,第二个是group1,第三个是group2,第四个是group3。因为使用了捕获,如果不行使用捕获的话括号里面加个?:就可以了。如(?:^|&)。

那么r[2]就是我们想要的参数,完整函数如下

function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]
)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURI(r[2]); return null;
}