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