js使用正则获取当前页面url指定参数

JavaScript029

js使用正则获取当前页面url指定参数,第1张

网址: http://1.com/

调用: QueryString('name')

返回: null

网址: http://1.com/?name=cwj&age=21

调用: QueryString('name')

返回: cwj

现在随便拿一个网址: https://m.weibo.cn/u/5902368392?topnav=1&wvr=6&is_all=1&jumpfrom=weibocom ,这个网址的 location 是:

所以这个地址的 location.search 是 ?topnav=1&wvr=6&is_all=1&jumpfrom=weibocom ,这就是需要执行匹配的字符串

match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

存放匹配结果的数组。在这个方法中将匹配结果放在了数组 sValue 中。

RegExp 对象表示正则表达式

该对象接受两个参数,第一个参数是一个字符串,指定了正则表达式的模式或其他正则表达式。第二个参数 i 代表着区分大小写的匹配。

调用该方法: QueryString('wvr') ,根据以上正则表达式匹配出来的结果是:

要注意的是 match 方法返回的数组 0 位置是匹配的字符串,所以相应参数在 sValue[1] 中

在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在这里是我的一些获取url信息的小总结。 下面我们举例一个URL,然后获得它的各个组成部分:http://i.cnblogs.com/EditPosts.aspx?opt=11、window.location.href(设置或获取整个 URL 为字符串)var test = window.location.href alert(test) 返回:http://i.cnblogs.com/EditPosts.aspx?opt=12、window.location.protocol(设置或获取 URL 的协议部分)var test = window.location.protocol alert(test) 返回:http:3、window.location.host(设置或获取 URL 的主机部分)var test = window.location.host alert(test) 返回:i.cnblogs.com4、window.location.port(设置或获取与 URL 关联的端口号码)var test = window.location.port alert(test) 返回:空字符(如果采用默认的80端口(update:即使添加了:80),那么返回值并不是默认的80而是空字符)5、window.location.pathname(设置或获取与 URL 的路径部分(就是文件地址))var test = window.location.pathname alert(test) 返回:/EditPosts.aspx6、window.location.search(设置或获取 href 属性中跟在问号后面的部分)var test = window.location.search alert(test) 返回:?opt=1 PS:获得查询(参数)部分,除了给动态语言赋值以外,我们同样可以给静态页面,并使用javascript来获得相信应的参数值。7、window.location.hash(设置或获取 href 属性中在井号“#”后面的分段)var test = window.location.hash alert(test) 返回:空字符(因为url中没有)8、js获取url中的参数值 一、正则法 function getQueryString(name) {  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')  var r = window.location.search.substr(1).match(reg)  if (r != null) {    return unescape(r[2])  }  return null}// 这样调用:alert(GetQueryString("参数名1"))  alert(GetQueryString("参数名2"))  alert(GetQueryString("参数名3"))二、split拆分法 function GetRequest() {   var url = location.search//获取url中"?"符后的字串   var theRequest = new Object()   if (url.indexOf("?") != -1) {     var str = url.substr(1)     strs = str.split("&")     for(var i = 0i <strs.lengthi ++) {       theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1])     }   }   return theRequest } var Request = new Object() Request = GetRequest()<br>// var id=Request["id"] // var 参数1,参数2,参数3,参数N // 参数1 = Request['参数1'] // 参数2 = Request['参数2'] // 参数3 = Request['参数3'] // 参数N = Request['参数N']三、指定取比如说一个url:http://i.cnblogs.com/?j=js,我们想得到参数j的值,可以通过以下函数调用。function GetQueryString(name) {   var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i")   var r = window.location.search.substr(1).match(reg)//获取url中"?"符后的字符串并正则匹配   var context = ""   if (r != null)     context = r[2]   reg = null   r = null   return context == null || context == "" || context == "undefined" ? "" : context } alert(GetQueryString("j"))四、单个参数的获取方法 function GetRequest() {   var url = location.search//获取url中"?"符后的字串   if (url.indexOf("?") != -1) {  //判断是否有参数   var str = url.substr(1)//从第一个字符开始 因为第0个是?号 获取所有除问号的所有符串   strs = str.split("=")  //用等号进行分隔 (因为知道只有一个参数 所以直接用等号进分隔 如果有多个参数 要用&号分隔 再用等号进行分隔)   alert(strs[1])    //直接弹出第一个参数 (如果有多个参数 还要进行循环的)   } }一、正则法functiongetQueryString(name) {   varreg = newRegExp('(^|&)'+ name + '=([^&]*)(&|$)', 'i')   varr = window.location.search.substr(1).match(reg)   if(r != null) {     returnunescape(r[2])   }   returnnull } // 这样调用: alert(GetQueryString("参数名1"))alert(GetQueryString("参数名2"))alert(GetQueryString("参数名3")) 二、split拆分法functionGetRequest() {   varurl = location.search//获取url中"?"符后的字串   vartheRequest = newObject()   if(url.indexOf("?") != -1) {     varstr = url.substr(1)     strs = str.split("&")     for(vari = 0i <strs.lengthi ++) {       theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1])     }   }   returntheRequest } varRequest = newObject() Request = GetRequest()<br>// var id=Request["id"] // var 参数1,参数2,参数3,参数N // 参数1 = Request['参数1'] // 参数2 = Request['参数2'] // 参数3 = Request['参数3'] // 参数N = Request['参数N'] 三、指定取比如说一个url:http://i.cnblogs.com/?j=js,我们想得到参数j的值,可以通过以下函数调用。 functionGetQueryString(name) {   varreg = newRegExp("(^|&)"+ name + "=([^&]*)(&|$)", "i")   varr = window.location.search.substr(1).match(reg)//获取url中"?"符后的字符串并正则匹配   varcontext = ""   if(r != null)      context = r[2]   reg = null   r = null   returncontext == null|| context == ""|| context == "undefined"? "": context } alert(GetQueryString("j")) 四、单个参数的获取方法functionGetRequest() {   varurl = location.search//获取url中"?"符后的字串   if(url.indexOf("?") != -1) {  //判断是否有参数    varstr = url.substr(1)//从第一个字符开始 因为第0个是?号 获取所有除问号的所有符串    strs = str.split("=")  //用等号进行分隔 (因为知道只有一个参数 所以直接用等号进分隔 如果有多个参数 要用&号分隔 再用等号进行分隔)    alert(strs[1])     //直接弹出第一个参数 (如果有多个参数 还要进行循环的)   } }

推荐你使用一个专门处理这种情况的jquery插件,目前网上已经很难下载到,我就把源码贴这里,你自己保存到一个js中,然后在页面中引用该js。使用方法在注释中,本人亲自使用过,才会在这里给你回答。请采纳。

/**

//例如 当前你的URL是:

//http://www.jb51.net/index.php?test=1&kk=2

//

//如果想获取test,则可以引入插件后,

//用如下方法获取:

//var test = $.query.get('test')

//

//如果参数有多个相同的名称 ,则可以这样:

//var arr = $.query.get('testy')

//输出: [ 值1 , 值2, 值3...]

//

//如果要获取多个相同名称中的某一个,可以这样:

//var arrayElement = $.query.get('testy[1]')

//

//此插件不仅能获取参数,也能设置参数。

//

//设置一个参数:

//var newUrl = $.query.set("section", 5).toString()

//输出 : "?section=5"

//

//设置两个参数:

//var newUrl = $.query.set("section", 5).set("action", "do").toString()

//输出 : "?action=do§ion=5"

//

//

//删除一个参数:

//var oldQueryAgain = $.query.REMOVE("type")

//

//清空所有参数:

//var emptyQuery = $.query.empty()

//

//复制所有参数:

//var stillTheSame = $.query.copy()

new function(settings) {

// Various Settings

var $separator = settings.separator || '&'

var $spaces = settings.spaces === false ? false : true

var $suffix = settings.suffix === false ? '' : '[]'

var $prefix = settings.prefix === false ? false : true

var $hash = $prefix ? settings.hash === true ? "#" : "?" : ""

var $numbers = settings.numbers === false ? false : true

jQuery.query = new function() {

var is = function(o, t) {

return o != undefined &&o !== null &&(!!t ? o.constructor == t : true)

}

var parse = function(path) {

var m, rx = /\[([^[]*)\]/g , match = /^([^[]+)(\[.*\])?$/ .exec(path), base = match[1], tokens = []

while (m = rx.exec(match[2])) tokens.push(m[1])

return [base, tokens]

}

var set = function(target, tokens, value) {

var o, token = tokens.shift()

if (typeof target != 'object') target = null

if (token === "") {

if (!target) target = []

if (is(target, Array)) {

target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value))

} else if (is(target, Object)) {

var i = 0

while (target[i++] != null)

target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value)

} else {

target = []

target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value))

}

} else if (token &&token.match( /^\s*[0-9]+\s*$/ )) {

var index = parseInt(token, 10)

if (!target) target = []

target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value)

} else if (token) {

var index = token.replace( /^\s*|\s*$/g , "")

if (!target) target = { }

if (is(target, Array)) {

var temp = { }

for (var i = 0i <target.length++i) {

temp[i] = target[i]

}

target = temp

}

target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value)

} else {

return value

}

return target

}

var queryObject = function(a) {

var self = this

self.keys = { }

if (a.queryObject) {

jQuery.each(a.get(), function(key, val) {

self.SET(key, val)

})

} else {

jQuery.each(arguments, function() {

var q = "" + this

q = q.replace( /^[?#]/ , '')// remove any leading ? || #

q = q.replace( /[&]$/ , '')// remove any trailing &||

if ($spaces) q = q.replace( /[+]/g , ' ')// replace +'s with spaces

jQuery.each(q.split( /[&]/ ), function() {

var key = decodeURIComponent(this.split('=')[0] || "")

var val = decodeURIComponent(this.split('=')[1] || "")

if (!key) return

if ($numbers) {

if ( /^[+-]?[0-9]+\.[0-9]*$/ .test(val)) // simple float regex

val = parseFloat(val)

else if ( /^[+-]?[0-9]+$/ .test(val)) // simple int regex

val = parseInt(val, 10)

}

val = (!val &&val !== 0) ? true : val

if (val !== false &&val !== true &&typeof val != 'number')

val = val

self.SET(key, val)

})

})

}

return self

}

queryObject.prototype = {

queryObject: true,

has: function(key, type) {

var value = this.get(key)

return is(value, type)

},

GET: function(key) {

if (!is(key)) return this.keys

var parsed = parse(key), base = parsed[0], tokens = parsed[1]

var target = this.keys[base]

while (target != null &&tokens.length != 0) {

target = target[tokens.shift()]

}

return typeof target == 'number' ? target : target || ""

},

get: function(key) {

var target = this.GET(key)

if (is(target, Object))

return jQuery.extend(true, { }, target)

else if (is(target, Array))

return target.slice(0)

return target

},

SET: function(key, val) {

var value = !is(val) ? null : val

var parsed = parse(key), base = parsed[0], tokens = parsed[1]

var target = this.keys[base]

this.keys[base] = set(target, tokens.slice(0), value)

return this

},

set: function(key, val) {

return this.copy().SET(key, val)

},

REMOVE: function(key) {

return this.SET(key, null).COMPACT()

},

remove: function(key) {

return this.copy().REMOVE(key)

},

EMPTY: function() {

var self = this

jQuery.each(self.keys, function(key, value) {

delete self.keys[key]

})

return self

},

load: function(url) {

var hash = url.replace( /^.*?[#](.+?)(?:\?.+)?$/ , "$1")

var search = url.replace( /^.*?[?](.+?)(?:#.+)?$/ , "$1")

return new queryObject(url.length == search.length ? '' : search, url.length == hash.length ? '' : hash)

},

empty: function() {

return this.copy().EMPTY()

},

copy: function() {

return new queryObject(this)

},

COMPACT: function() {

function build(orig) {

var obj = typeof orig == "object" ? is(orig, Array) ? [] : { } : orig

if (typeof orig == 'object') {

function add(o, key, value) {

if (is(o, Array))

o.push(value)

else

o[key] = value

}

jQuery.each(orig, function(key, value) {

if (!is(value)) return true

add(obj, key, build(value))

})

}

return obj

}

this.keys = build(this.keys)

return this

},

compact: function() {

return this.copy().COMPACT()

},

toString: function() {

var i = 0, queryString = [], chunks = [], self = this

var encode = function(str) {

str = str + ""

if ($spaces) str = str.replace( / /g , "+")

return encodeURIComponent(str)

}

var addFields = function(arr, key, value) {

if (!is(value) || value === false) return

var o = [encode(key)]

if (value !== true) {

o.push("=")

o.push(encode(value))

}

arr.push(o.join(""))

}

var build = function(obj, base) {

var newKey = function(key) {

return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join("")

}

jQuery.each(obj, function(key, value) {

if (typeof value == 'object')

build(value, newKey(key))

else

addFields(chunks, newKey(key), value)

})

}

build(this.keys)

if (chunks.length >0) queryString.push($hash)

queryString.push(chunks.join($separator))

return queryString.join("")

}

}

return new queryObject(location.search, location.hash)

}

}(jQuery.query || { }) // Pass in jQuery.query as settings object