JS的正则表达式

作者: 阿拉丁节能灯 | 来源:发表于2019-01-11 18:27 被阅读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的值)

相关文章

网友评论

    本文标题:JS的正则表达式

    本文链接:https://www.haomeiwen.com/subject/wfxfdqtx.html