zoukankan      html  css  js  c++  java
  • 探究js正则匹配方法:match和exec

      match是字符串方法,写法为:str.match(reg)

      exec是正则表达式方法,写法为:reg.exec(str)

      match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是null,故在没有深入了解两者的使用规则前,会误以为两者的使用效果是一样的,下面在几种情况中对match和exec进行区分。

    1、全局匹配:

      当不使用全局匹配时,两者的匹配效果是一样的,仅返回第一次匹配成功的结果:

    var s = "aaa bbb ccc";
    var reg = /w+/;//没有g
    var rs_match = s.match(reg);
    var rs_exec = reg.exec(s);
    console.log("match:",rs_match);
    console.log("exec:",rs_exec);

      当使用全局匹配时,两者的匹配结果出现区别:

    var s = "aaa bbb ccc";
    var reg = /w+/g;//有g
    var rs_match1 = s.match(reg);
    var rs_match2 = s.match(reg);
    var rs_exec1 = reg.exec(s);
    var rs_exec2 = reg.exec(s);
    console.log("match1:",rs_match1);
    console.log("match2:",rs_match1);
    console.log("exec1:",rs_exec1);
    console.log("exec2:",rs_exec2);

      a、全局匹配时,match会返回所有匹配上的内容;而exec仅匹配单次匹配上的内容

         b、全局匹配且进行多次匹配时,exe会从上次匹配结束的下一位开始匹配,返回本次匹配上的内容,直至无可以匹配的内容,返回null

      

    2、分组:

      无全局匹配分组时,match和exec返回结果相同。由于正则表达式采用了括号分组,所以在返回匹配结果的同时,依次返回该结果的所有分组:

    var s = "aaa1 bbb2 ccc3";
    var reg = /(w+)(d{1})/;//两个分组,无g
    var rs_match1 = s.match(reg);
    var rs_match2 = s.match(reg);
    var rs_exec1 = reg.exec(s);
    var rs_exec2 = reg.exec(s);
    console.log("match1:",rs_match1);
    console.log("match2:",rs_match1);
    console.log("exec1:",rs_exec1);
    console.log("exec2:",rs_exec2);

      全局匹配分组时,match和exec返回结果不同。match会返回所有匹配到的结果;而exec会返回本次匹配到的结果,若表达式中出现分组,则会依次返回本次匹配的全部分组:

    var s = "aaa1 bbb2 ccc3";
    var reg = /(w+)(d{1})/g;
    var rs_match1 = s.match(reg);
    var rs_match2 = s.match(reg);
    var rs_exec1 = reg.exec(s);
    var rs_exec2 = reg.exec(s);
    var rs_exec3 = reg.exec(s);
    var rs_exec4 = reg.exec(s);
    console.log("match1:",rs_match1);
    console.log("match2:",rs_match1);
    console.log("exec1:",rs_exec1);
    console.log("exec2:",rs_exec2);
    console.log("exec3:",rs_exec3);
    console.log("exec4:",rs_exec4);

  • 相关阅读:
    再叙存储设备
    分布式文件系统---测试
    分布式文件系统
    Solr 分布式(复制)配置--成功验证
    搜索服务之离线处理思路
    我为公司做的总体架构,欢迎提建议
    python的面向对象
    python异常处理
    迭代器和生成器
    python函数
  • 原文地址:https://www.cnblogs.com/hyaaon/p/4332678.html
Copyright © 2011-2022 走看看