正则学习(十四)——编程应用

131 阅读1分钟

前言

学习正则表达式最终目的是用,具体开发过程中哪些场景适用于正则表达式呢?下面我们就来分析一下。

操作

正则表达式核心点就是匹配,不管是匹配字符还是匹配位置。把匹配情况再细分一下,可以分为以下四种操作:

  • 替换,匹配到对应的字符然后替换成我们想要的字符,通过replace方法达到替换目的。
      const reg = /\d/g;
      const str = '12';
      console.log(str.replace(reg, 'a')); //aa
  • 校验,用正则去校验字符串是否满足条件,比如密码检验,能够用到的方法也有多个。
      const reg = /\d/;
      const str = '12';
      console.log(reg.test(str));
      console.log(reg.exec(str));
      console.log(str.match(reg));
      console.log(str.search(reg));

以上四种方法都能去校验,只是每个方法返回的值不一样,根据判断的方式去选用合适的方法。如果我们想要用test去匹配整体字符,就要加上^与$。

  • 分割,我们可以用正则对匹配上的字符进行分割操作,通过字符串split方法去实现。split方法我们都不陌生,需要注意的是split第二个参数代表返回数组的最大长度;如果正则中有分组,那么分割出的数组是包含分割符号的。
      const reg = /(,)/;
      const str = '1,2,3';
      console.log(str.split(reg, 3)); // ['1', ',', '2']

split设置了第二个参数,正则又有了分组,返回的结果就是上述例子所述。

  • 提取,去捕获匹配到的结果,该功能一般使用括号的引用作用去实现,除了split,每个方法都能通过匹配结果去提取数据。
    match、exec————当match正则不加g时,两个方法返回的结果一致,都返回一个数组,数组的第二个元素开始就是捕获的字符。
    test、search————这两个方法可以用捕获组属性去提取。捕获组属性是RegExp的静态属性,RegExp.$1表示第一个捕获的数据,以此类推。
    replace————通过回调函数,将匹配到的数据提取出来。
   const reg = /(\d)/;
      const str = 'abc1';
      console.log(str.match(reg)[1]);//1
      console.log(reg.exec(str)[1]);//1
      reg.test(str)
      // str.search(reg)
      console.log(RegExp.$1)//1
       str.replace(reg, function (one) {
        console.log(one); //1
      });

RegExp.$1是全局属性,容易造成污染,尽量不要使用。

总结

正则表达式的编程应用大致也就这四个方面,工具最终目的还是方便,是否使用正则,如何写好正则表达式,还是得我们多练。