匹配url查询参数的正则问题

网上js中匹配url中参数的函数

function getQueryString(name){
            var reg = new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
            var href = window.location.href
            var index = href.indexOf('?')
            var r = href.substr(index+1).match(reg);
            if(r != null)
            return unescape(r[2]);
            return null;
        }

我看解释,开头的(^|&)的作用是^或者&或者都没有,(&|$)是&或者$或者没有;
但是我试了以^开头,会匹配不到。
所以我理解^在这里就是开头,$是结尾.
如果是这样|&又怎么理解,或者说是不是可以这样写^(&),|没有意义的。这样又返回null.
我最后试了^(|&)"+name+"=(1*)(&|)$,返回结果和源码是一致的。
那么|是什么作用,是没有或者& 吗?


  1. &
阅读 3.1k
3 个回答

^|&是匹配开头那个位置或者&出现的地方

我现有知识的理解是|是或的意思,两遍要有值,没值我猜测是空串或者空串

 console.log(/|/.test("12313"));  //true

而你写的(^|&)意思是要么(^),也就是空开头,要么&

console.log(/(^|&)/.test("12131"));  //都是true
console.log(/(^a|&)/.test("12131")); //尖叫那边随便写个就是false了
推荐问题
宣传栏