js正则基础入门3

match实现捕获

       除了正则的exec方法实现捕获,字符串中的match方法也可以实现捕获。
在学习之前,我们先来补点之前漏掉的知识点:()分组的作用。

分组的作用:

  1. 改变默认优先级
  2. 分组引用:var reg = /^(\w)\1(\w)\2$/;
    “\1”代表和第一个分组出现一模一样的内容,“\2”代表和第二个分组出现一模一样的内容。
  3. 分组捕获:正则在捕获的时候不仅仅把大正则匹配的内容捕获到,小正则匹配的内容也可以捕获到。
    举个栗子:
var reg = /([a-z]+)\d+/g;
var str = "love2016you2017";
console.log(reg.exec(str));  // -->["love2016", "love"]

       从结果看,在正则中加了分组后,捕获的结果也中也多了将小正则(我们把分组中的正则叫小正则)匹配的结果也捕获了。
以上,就是()分组的三个重要的作用。现在让我们来学习match吧。
再拿上边的例子来说,运行console.log(str.match(reg));输出结果是个数组["love2016", "you2017"],我们能够看出match的问题:在分组捕获的情况下,match只能捕获到大正则匹配的内容,而小正则的内容无法获取。

replace实现捕获

       其实还有第三种方法实现捕获,就是字符串的replace方法,不仅可以捕获还可以进行替换新的内容。

知识点回顾:在字符串替换时,只能替换第一个查找到的内容。

var str = "love2016you2017";
console.log(str.replace("20", "A"));  // --> loveA16you2017

在使用正则匹配时,加修饰符g以后就能解决这个问题,全部查找,全部替换

var reg = /([a-z]+)\d+/g;
var str = "love2016you2017";
console.log(str.replace(reg, "A"));  // --> AA

输出的结果是AA,说明进行了两次捕获,一次结果是love2015,一次是you2016,且都被替换成了A。我们来深入了解下replace方法。

str.replace(reg,function(){
    console.log(arguments);
});```

![打印结果](http://upload-images.jianshu.io/upload_images/3738226-09f7947d9b7854f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

       replace每次捕获后的结果当做实参传给第二个参数函数里,这和用exec捕获的结果很像,都是一个数组,而且第一个参数都是捕获到的内容(arguments[0])。数组里的第二个数是小正则的匹配的内容(arguments[1])。

你可能感兴趣的:(js正则基础入门3)