求解这段javascript的正则表达式
<script>document.getElementById('a').value=decodeURI(location.search.match(/(\?|&)a=(...
<script>
document.getElementById('a').value=decodeURI(location.search.match(/(\?|&)a=([^]*)/)[2])
</script>
求解这段javascript的正则表达式,每个符号所代表的含义,越详细越好,不要复制的。 展开
document.getElementById('a').value=decodeURI(location.search.match(/(\?|&)a=([^]*)/)[2])
</script>
求解这段javascript的正则表达式,每个符号所代表的含义,越详细越好,不要复制的。 展开
3个回答
展开全部
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次出现的([^]*)串
正则的真身是这个! (\?|&)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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
爱上佛今晚我科技那深度国际上迪佛个好不IE无溶剂上迪佛农科
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询