美文网首页
正则-分组捕获实例分析

正则-分组捕获实例分析

作者: 子心_ | 来源:发表于2019-06-16 09:43 被阅读0次

    在正则捕获的时候,我们添加分组,不仅仅可以把大正则匹配的内容捕获,而且还可以把小分组代表的子正则匹配的内容一起捕获出来。

    (?:xxx)分组只匹配不捕获

    var str = "my name is {0}, my age is {1}, i come from {2}, i love {3}~~~";
    var ary = ["易文",  28, "湖南", "javaScript"];
    

    // {0} ---> ary[0] "易文"
    // {1} --> ary[1] 28
    // ...我们在捕获的时候,不仅要获取{0},而且还要获取里面的数字0,并且每一次exec执行的时候, 同时获取这两个

    var reg = /{(\d+)}/g;
    console.log(reg.exec(str)); // -> res=["{0}", "0",...]
    // res[1]获取的是最小正则捕获的内容 ary[res[1]]代表的是对应数组中的内容,我们用这个内容把大正则捕获的res[0]"{0}"替换掉即可。
    

    replace字符串实现替换的一个方法,但是一般情况下,执行一次只替换一个,我们为了替换换所有的符合的,需要用正则来处理:

    var str = "beijingnanjing beijinghuangyingni";
    str = str.replace(/beijing/g, "珠峰"); //在整个字符串中,把符合正则的部分替换成“北京”
    // 如果你想替换的话,首先你先要把"beijing"获取到,然后再替换-->如果replace第一个参数是正则,那么涉及到了正则的捕获
    /*
    lastIndex = 0
    首先捕获"beijing",捕获一次,replace就执行一次替换的操作
    lastIndex = 7
    再次捕获"beijing", 捕获一次,replace就执行一次替换的操作
    lastIndex = 21
    捕获不到内容了,结果为null,replace就不再执行替换的操作了
    */
    

    如上述所说,我们当replace执行两次,相当于第二个参数function也执行两次,在每一次function执行的时候,在函数中return后面返回的是啥,就把捕获的内容替换成啥:

    str = str.replace(/beijing/g, function (content, index, input) {
      // console.log(arguments);
    // arguments当前函数的集合,我们发现和正则exec每一次捕获的结果很相似,这个函数会默认有三个参数:
    // content:每一次捕获的内容
    // index: 每一次捕获的开始索引
    // input: 原始字符串
      return content.toUpperCase();
    });
    console.log(str);
    

    相关文章

      网友评论

          本文标题:正则-分组捕获实例分析

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