求解这段javascript的正则表达式

<script>document.getElementById('a').value=decodeURI(location.search.match(/(\?|&)a=(... <script>
document.getElementById('a').value=decodeURI(location.search.match(/(\?|&)a=([^&#]*)/)[2])
</script>
求解这段javascript的正则表达式,每个符号所代表的含义,越详细越好,不要复制的。
展开
 我来答
百度网友e096309
推荐于2016-10-18 · TA获得超过1327个赞
知道小有建树答主
回答量:501
采纳率:96%
帮助的人:416万
展开全部
js里的正则表达式用//包含它的真身,所以两边的/只是正则的开始和结束符号,就像用来包含字符串的双引号""一样。
正则的真身是这个! (\?|&)a=([^&#]*)

首先括号有两个作用:一个是将括号里的内容放到match的返回值中,另一个是配合里面的|来表示“或”的语义。也就是(abc|xyz)表示匹配abc或者xyz。
问号?在正则里是个量词,表示0个或1个,但如果希望匹配字符串中的问号,则必须在正则里转义,即\?
所以(\?|&)a=可以表示匹配一个?或一个&,后面紧跟着a=

后面的括号里没有|,其作用只有将里面[^&#]*匹配到的东西放到match的返回值中。
[]的作用是列举字符!但不管列举多少个字符,它都表示“一个”,比如说[abc]表示一个a或者一个b或者一个c。
它和(|)的区别是,(abc|xyz|123)可以表示abc或xyz或123,每个串都必须作为一个整体。[abcxyz123]却只能匹配一个字符,不论顺序
举个栗子,ax可以被[abcxyz123]匹配到,因为它包含了一个a,或一个x。但ax不能被(abc|xyz|123)匹配到,因为它不包含abc、xyz、123中的任何一个串。
[]里面如果以^开头的话,表示“不包含后面的任何一个字符”的字符。比如[^ab]表示一个既不是a也不是b的字符。
比如说xyz三个字符都满足条件,它们都既不是a也不是b。但xaz里,只有x和z满足条件。
所以~ [^&#]表示一个既不是&,也不是#的字符。

然后,*是一个量词,表示0个或多个(就是 ≥0 个)。
aaabbaa如果用(a*)匹配的话,可以得到aaa(match函数只找出第一次匹配的结果)。
[^&#]*就表示0个或多个 既不是&,也不是#的字符。
abc&xxx#zzz用([^&#]*)匹配的话,可以得到abc

假设我们用m保存match的返回值:
m = xxxx.match(/(\?|&)a=([^&#]*)/)
如果xxxx不满足以上描述的字符串,则m是null
否则m是一个数组,并且
m[0]里存储了整个正则匹配到的字符串,即从?或&开始,到最后一个非&且非#结束的串。
m[1]里存储了?或&,具体看xxxx里是有的是哪个了。
m[2]里存储了由多个非&或非#构成的字符串。

如果需要匹配多个键值对,可以在//的后面加个g,即(/(\?|&)a=([^&#]*)/g
但此时返回值里存储的内容就只有括号匹配到的东西了。
比如m = xxxx.match(/(\?|&)a=([^&#]*)/g)
m[0]存储了第1次出现的?或&
m[1]存储了第1次出现的([^&#]*)串
m[2]存储了第2次出现的?或&
m[3]存储了第2次出现的([^&#]*)串
追问
可以加个Q交流下吗?我的Q:1364122707
我想A网页传值给B网页,如果A网页传的是中文,B网页如何获取中文,以上的代码是B网页的,A网页的代码如下:

匿名用户
2015-11-20
展开全部
location.search.match(/(\?|&)a=([^&#]*)/)[2]

location.search是指浏览器的地址栏的搜索内容
例如

htsdftp://sdfsdf.com/sf.html?a=you

?a=you就是匹配出的整体
var reg = /(\?|&)a=([^&#]*)/;
问号?或&后面是a=
后面是  不包括&#的任意字符
获取的结果根据括号的数目,有各自的索引
所以上面的[2]就是第二个括号的内容

var str = "htsdftp://sdfsdf.com/sf.html?a=you";
var reg = /(\?|&)a=([^&#]*)/;
var arr = str.match(reg);
console.log(arr);
// ["?a=you","?","you"]
you就是你要的
追问
/(\?|&)a=([^&#]*)/
/.../这两个是正则表达式的开始和结束符号吧?
(\?|&)这段是什么意思?

另外:

如果我的键值对有两个或多个,正则表达式如何修改?
追答
sdfsdfsf
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
q234871072
2015-11-20
知道答主
回答量:4
采纳率:0%
帮助的人:4527
展开全部
爱上佛今晚我科技那深度国际上迪佛个好不IE无溶剂上迪佛农科
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式