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;
}