JS的正则表达式
2019-01-11 本文已影响9人
阿拉丁节能灯
前景提示:处理一串URL,取出URL中指定参数的值。代码如下
1 var url="http://www.baidu.com?ajbs=75000000096128&id=1212";
2 url=encodeURI(url);
3
4 var reg = new RegExp('(\\?|&)' + 'ajbs' + '(=[^&]*)($|&)','i');
5 var r = url.match(reg);
6
7 if (r != null) {
8 alert('unescape:'+unescape(r[2]));
9 }
line1:这是我们要处理的url
line4:这个部分就是正则表达式的匹配规则,重点要讲。从整体来看,这里新建了一个RegExp对象。
- 构造函数RegExp(str1,str2)
-- str1:正则表达式的规则
-- str2:修饰符
上面的正则表达式要拆开看 - '(\\?|&)' :表示字符串出现"?"(因为?在正则表达式中是关键字,所以需要转义)或者"&",但是两者不会同时出现
- (=[^&]):表示"="号后面非"&"字符出现0次或者多次。"^"出现在"[]"中表示取反,""表示0次或者多次
- ($|&):和第一条一样,字符串出现""是强制结束的标志
这个正则表达式的整体意思就是匹配字符串中以?或者&开头,中间是“ajbs=”,后面跟着“非&”字符串,最后以“&”结尾或者无字符为止。
line5:url.match(reg),匹配正则表达式,重点讲。此函数匹配结果是一个数据,如果url中有reg描述的字符串,则返回数据;如果没有,则返回null。而数据,与reg的修饰符有着密切的关系。 - 修饰符为g时,全局搜索,返回的数组中只存放匹配到的字符串。
- 修饰符不为g时,返回的数组中先存放匹配到的字符串,之后一次存放所有匹配子字符串。而所谓子字符传,即上面reg中“()”中的内容就是子字符串。
所以上面代码得到的
r的值为:?ajbs=75000000096128&,?,=75000000096128,&(以逗号分隔的数组)
r[2]值为:75000000096128(即ajbs的值)