正则学习(五)—— 经典案例

144 阅读2分钟

前言

我们已经了解字符与位置匹配方法,本节我们来看下正则经典案例,或许我们在面试中也会碰到,这时候快速答出也能加个分。

字符匹配

字符匹配用字符组与量词去匹配我们想要的结果,我们以匹配时间为例,这里时间以24小时为准,比如22:38。我们来分析下该时间的特点:
第一位必须是0-2。
第二位分情况,如果前面一位不是2,那么就是0-9;如果是2,就只能是0-3,这点我们要想清楚。
第三位、第四位代表着分钟,分别为0-5、0-9。
根据24小时制的特点分析出每个位数数组特点,接下来我们用字符组表示出来就行:

      const str = '21:41';
      const str1 = '25:15';
      const reg = /([0-1][0-9]|2[0-3]):[0-5][0-9]/;
      console.log(reg.test(str));//true
      console.log(reg.test(str1));//false

位置匹配

位置相关匹配有个经典案例就是数组字符串千位分隔符,比如'1234'变成'1,234',这道题我们要清楚用正则是要匹配位置,匹配到3个数字前面的位置,然后让其替换成逗号。匹配某某之前的位置我们就要用到?=,3个数字就非常好表示——\d{3},不止有一组数字,也就是说3个连在一起的数字不止出现一次,那我们就用+来表示。

      const str = '12345';
      const reg = /(?=(\d{3})+$)/g;
      console.log(str.replace(reg, ','));//12,345

以上正则碰到123456这样子都得字符会有一个问题?没错,当碰到3的倍数最前面的也会被加上分隔符,也就是变成",123,456",最前面的符号该如何去掉呢?这个符号出现的位置是开头,也就是当位置时开头我们就不加上分隔符。开头符号是^,加上?!就能得到我们想要的效果了。所以更完善的正则如下:

   const reg = /(?!^)(?=(\d{3})+$)/g;

写正则也有一步步完善的过程。

总结

以上就是正则两个经典案例,通过这两个案例我们大概能知道要想写好正则,就要先分析出来字符或位置特点,然后考虑所有的情况。