正则表达式一些笔记

1:正则\1\2的理解
‘\1’ 匹配的是 所获取的第1个()匹配的引用。例如,’(\d)\1’ 匹配两个连续数字字符。如33aa 中的33
‘\2’ 匹配的是 所获取的第2个()匹配的引用。
例如,’(\d)(a)\1’ 匹配第一是数字第二是字符a,第三\1必须匹配第一个一样的数字重复一次,也就是被引用一次。如9a9 被匹配,但9a8不会被匹配,因为第三位的\1必须是9才可以,

‘(\d)(a)\2’ 匹配第一个是一个数字,第二个是a,第三个\2必须是第二组()中匹配一样的,如,8aa被匹配,但8ab,7a7不会被匹配,第三位必须是第二组字符的复制版,也是就引用第二组正则的匹配内容。

//编程题,找出字符串中连续出现最多的字符和个数
//'abcaakjbb' => {'a':2,'b':2}
//'abbkejsbcccwqaa' => {'c':3}

      let str = "aaabb333cccc35";
      const arr = str.match(/(\w)\1*/g);
      const maxLen = Math.max(...arr.map((s) => s.length));
      const result = arr.reduce((pre, curr) => {
        if (curr.length === maxLen) {
          pre[curr[0]] = curr.length;
        }
        return pre;
      }, {});

2:解析正则表达式中的.,.?,.+?的含义
2.1:(.
. 表示匹配除换行符 \n 之外的任何单字符,表示零次或多次。所以.在一起就表示任意字符出现零次或多次。没有?表示贪婪模式。比如a.b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
2.2:(.
?)
?跟在
或者+后边用时,表示懒惰模式。也称非贪婪模式。就是匹配尽可能少的字符。就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.
?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。
2.3:( .+?)
?跟在
或者+后边用时,表示懒惰模式。也称非贪婪模式。就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。
a.+?b匹配最短的,以a开始,以b结束的字符串,但a和b中间至少要有一个字符。如果把它应用于ababccaab的话,它会匹配abab(第一到第四个字符)和aab(第七到第九个字符)。注意此时匹配结果不是ab,ab和aab。因为a和b中间至少要有一个字符。

      //代码示例
        const getType = (s) => {
          return Object.prototype.toString
            .call(s)
            .replace(/\[object (.*?)\]/, "$1")
            .toLowerCase();
        };
        console.log(getType(new Number(1))) //number

3:手机号脱敏实现

      const tel = "12345678901"
      const tel1 = tel.replace(/(\d{3})(\d{4})(\d{4})/,"$1****$3")
      const replacer = function(match,p1,p2,p3,offst,string){
          return p1 + "****" + p3
      }
      const tel2 = tel.replace(/(\d{3})(\d{4})(\d{4})/,replacer)
      console.log(tel1);//123****8901
      console.log(tel2);//123****8901
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值