tring.prototype 方法的正则有 match,search
     match 返回匹配的项,search 返回匹配的第一个索引如下:
     var reg = /[a-z]\d/;
     var str = "q1d2";
     console.log(str.match(reg))// 结果是 [q1]   
     console.log(str.search(reg))// 结果是0 
如果是 /g
    var reg = /[a-z]\d/g;
     var str = "q1d2";
     console.log(str.match(reg))// 结果是 [q1,d2]   
     console.log(str.search(reg))// 结果是0
String 的方法不会返回子匹配的项,而RegExp的 exec 方法会返回子匹配项,如:
     var reg = /[a-z](\d)/g;
     var str = "q1d2";
     console.log(str.match(reg))// 结果是 仍然是[q1,d2]   
     console.log(str.search(reg))// 结果是0
RegExp.prototype 有两个正则方法, test,和exec
     test 表示是否匹配上了true|false
     exec 返回匹配的项的数数组 result  result[0]是匹配项,result[1]..依次是子匹配项
例子:
var reg = /[a-z]\d/; var str = "q1d2"; console.log(reg.exec(str)); //结果是 [q1,1] console.log(reg.test(str)); //true
在全局匹配的时候exec连续执行得到全部的匹配项和子匹配项,例子:
     var reg = /[a-z]\d/g;
     var str = "q1d2";
     console.log(reg.exec(str)); //结果是 [q1,1]
     console.log(reg.exec(str)); //结果是 [d2,2]
RegExp.prototype.lastIndex 初始为0,只有当为全局匹配时才生效 ,被设置为紧随最近一次成功匹配的下一个位置,匹配为空后会重置为0
      var reg = /[a-z]\d/;
      reg.test("111d1")
       reg.lastIndex//0
    
       var reg = /[a-z]\d/g;
      reg.test("111d1")
       reg.lastIndex//5
 es6新出的 y 标识 RegExp.prototype.sticky为true 和lastIndex 配合使用
       表示一定要从 lastIndex开始匹配,
      var reg = /[a-z]\d/y;
       reg.lastIndex = 2;
       reg.test("sssss1") // false
       reg.test("sssss1")
正则的情况
       $1-9表示子匹配项的值
       "ss1dd1".replace(/([a-z])(\d)/g,"$2"+"ff"+"$1");
        
       repalce 传入function 参数分别为,匹配项,子匹配项,index,str
       返回要替换的内容 
       "ss1dd1".replace(/([a-z])(\d)/g,function(matcher,$1,$2,index,str){
       
        console.log(matcher,$1,$2,index,str)
        return 22
})
原文:https://www.cnblogs.com/chillaxyw/p/10663482.html