获取地址栏上的URL参数现在最简单通用的方法应该就是下面这种了。
function getUrlParam (name) {
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURIComponent(r[2]); return null;
}
// 使用方法就是:http://www.test.com?a=123&b=231
var a = getUrlParam('a') // a = 123
var b = getUrlParam('b') // b = 231

不过这种方法是有缺陷的,它不能识别URL中值带&或=,例如:http://www.test.com?a=1&23&b=231 在这里我们

a参数定的值为“1&23”,

如果还用上面的方法获取的话:

a = 1

为什么呢,这就要解析一波这个方法的原理

// 首先是获取URL
var r = window.location.search.substr(1);
// window.location.search.substr(1)可以获取URL?后面的字符串例如:http://www.test.com?a=123&b=231得到的会是:a=123&b=231
// 然后再用正则获取各个参数下的值
var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
// 1.这里的(^|&)会匹配开头为空或&的字符
// 2.+ name + 这里是匹配你要找的参数名
// 3.([^&]*)这里是匹配“参数=”后面非&的字符
// 4.(&|$)这里匹配以空或&结束的字符
// 这里4个条件就把a=123&b=231里的a=123&或&b=231找出来了
r = r.match(reg);
// 这里match方法可以把符合正则的字符找出来,是以数组形式给出,例如我们要找的是a的话:
/*
[
'a=123&', // 这里是整个正则匹配出来的
'', // 这里是(^|&)匹配出来的
'123', // 这里是([^&]*)匹配的
'&' // 这里是(&|$)匹配的
]
*/
// 我们需要的就是第三个([^&]*)匹配的字符
decodeURIComponent(r[2]) // 这里拿到数组的第三个值再用decodeURIComponent转码

-就是如此要是再a=123&中提前遇到&就是提前终止。导致http://www.test.com?a=1&23&b=231 中a的值为1

那要怎么避免呢,这里就要修改一下正则

var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)')
// 这里前面的'(^|&)' + name + '='这段还是不变的。
// 不过([^&]*)这里对&的限制要解除才行。不能让它只匹配非&字符。所以改为([.*])匹配任何字符(这样说可能不是很严谨)
// (&|$)这里的最后不能通过&或空判断,应该是&xxx=这种结尾。所以改为(&[^&=]+=|$)匹配,这里的意思为&开头=结尾中间夹着非”&和=“的其他字符。这就满足我们的要求了。
// 最终的正则表达式应该是:
var reg = new RegExp('(^|&)' + name + '=(.*)(&[^&=]+=)');
// 这里因为(.*)是匹配所有字符,所以会匹配到最后一个符合(&[^&=]+=)的参数停止,这就会有一个问题了,
// 例如"http://www.test.com?a=1&23&b=231&c=565" 这里去‘a’的时候会取到'1&23&b=231',这里包含了b的。所以这里还要进一步处理只去&b=前面的值。
// 这里假设取‘a’的值为1&23&b=231
var a = '1&23&b=231'
var l = a.match(/&[^&=]+=/)[0] // 这里会得到第一个匹配‘/&[^&=]+=/’的字符串:'&b='
a = a.split(l)[0] // 这里在根据l分割a,取第一个,就是我们要的了
// 不过这样匹配不到最后一个参数,因为最后一个是空结尾而不是"&xxx=",所以要写多一个匹配最后一个参数的正则
var reg = new RegExp('(^|&)' + name + '=(.*)($)');

整个全新的方法是:

function getUrlParam (name) {
var reg = new RegExp('(^|&)' + name + '=(.*)(&[^&=]+=)');
var regLast = new RegExp('(^|&)' + name + '=(.*)($)');
var r = window.location.search.substr(1).match(reg) || window.location.search.substr(1).match(regLast);
if (r != null) {
var l = r[2].match(/&[^&=]+=/)
if (l) {
return decodeURIComponent(r[2].split(l[0])[0]);
} else return decodeURIComponent(r[2]);
}
return null;
}

有什么错误请指出。。

js获取地址栏URL上的参数的更多相关文章

  1. JS如何获取地址栏url后面的参数?

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:JS如何获取地址栏url后面的参数?: 这里提供了两种获取地址栏url后面参数的方法: 方式1 传参: window.location. ...

  2. js获取地址栏url以及获取url参数

    js原生态写法  代码如下 复制代码 function getUrlParam(name) {     var reg = new RegExp("(^|&)"+ name ...

  3. js获取当前url地址及参数

    介绍:设置或获取对象指定的文件名或路径. window.location.pathname //返回 设置或获取整个 URL 为字符串. window.location.href 设置或获取与 URL ...

  4. 获取网页URL地址及参数等的两种方法(js和C#)

    转:获取网页URL地址及参数等的两种方法(js和C#) 一 js 先看一个示例 用javascript获取url网址信息 <script type="text/javascript&q ...

  5. 【功能代码】---4用JS获取地址栏参数方法

    用JS获取地址栏参数方法 // 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new Reg ...

  6. (转)用JS获取地址栏参数的方法(超级简单)

    转自http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html 用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获 ...

  7. 【JS】---4用JS获取地址栏参数方法

    用JS获取地址栏参数方法 // 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new Reg ...

  8. 使用jquery获取url上的参数(笔记)

    使用jquery获取url上的参数(笔记) 一.做作业时经常要获取url上的参数 1.当url上有多个参数时 从互联网找到了一个方法 (function ($) { $.getUrlParam = f ...

  9. Loadrunner加密算法脚本与token作为get请求url上的参数处理

    1.当字符串被封装好加密时(下例将算法封装在md5中),使用Loadrunner编写脚本,需要进行如下操作:       1)将md5.h文件添加到Extra Files 下,如图(Loadrunne ...

随机推荐

  1. MySQL冗余和重复索引

    MySQL允许在相同列上创建多个索引,无论是有意还是无意,mysql需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个地进行考虑,这会影响性能. 重复索引是指的在相同的列上按照相同的顺序创建 ...

  2. Winsock网络编程笔记(3)----基于UDP的server和client

    在上一篇随笔中,对Winsock中基于tcp面向连接的Server和Client通信进行了说明,但是,Winsock中,Server和Client间还可以通过无连接通信,也就是采用UDP协议.. 因此 ...

  3. Java IO编程全解(五)——AIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7794151.html 前面讲到:Java IO编程全解(四)--NIO编程 NIO2.0引入了新的异步通道的 ...

  4. 【框架学习与探究之日志组件--Log4Net与NLog】

    前言 本文欢迎转载,作者原创地址:http://www.cnblogs.com/DjlNet/p/7604340.html 序 近日,天气渐冷,懒惰的脑虫又开始作祟了,导致近日内功修炼迟迟未能进步,依 ...

  5. 前端html 中jQuery实现对文本的搜索并把搜索相关内容显示出来

    做项目的时候有这么一个需求,客户信息显示出来后我要搜索查找相关的客户,并把相关的客户信息全部显示出来,因为一个客户全部信息我写在一个div里面  所以显示的时候就是显示整个div.先看看实现的效果: ...

  6. C# 关闭窗体立即停止进程

    C#在关闭窗体的时候,有时线程还在后台执行,没有及时退出. 处理方案: 为Form添加FormClosing事件,加入以下语句,在退出时,杀死本进程. System.Diagnostics.Proce ...

  7. Servlet编程实例1

    编程目的:使用JSP+servlet,来实现一个登陆页面,登陆成功则提示成功,登陆失败则提示失败. 编程要求:登陆页面由login.jsp负责显示,登陆成功由success.jsp负责显示,登陆失败由 ...

  8. linux操作系统基础篇(八)

    shell脚本的变量以及正则表达式 一.变量 含义:程序的运行就是一些列状态的变量->用变量值的变化去表示. 命名规则 以字母或下划线开头,剩下的部分可以是:字母.数字.下划线. 最好遵循下述规 ...

  9. SSM所需的jar

    首先去找struts的. http://struts.apache.org/ 下载最新的struts 2.3.7. http://www.springsource.org/spring-framewo ...

  10. PHP strftime()函数输出乱码问题

    直接调用strftime() strftime(time_buf, 80, "%a, %e %b %G %T %z", p_stime);  输出为 Îå, 18 12ÔÂ 201 ...