正则学习(四)—— 位置匹配

219 阅读2分钟

前言

正则要么匹配字符,要么匹配位置,我们已经讲解了字符匹配方式,本节来看一下位置的匹配。

位置

字符之间的空隙就是位置,也叫作锚,正则中有以下的锚:

  • ^:匹配头部位置,用来匹配开头的字符,在字符组中也有^的应用,排除字符组,一定要区分两者含义,不同位置含义不同,所以对于这些特殊的符号,大家要牢记。
   const str = 'abc';
   const reg = /^a/g;
   console.log(reg.test(str)); //true
  • :匹配尾部位置,好相反,在多行匹配中匹配行的结尾。注意:匹配尾部位置,跟^刚好相反,在多行匹配中匹配行的结尾。注意是写在字符后面的,而^是写在字符前面的,具体的位置用法要牢记。
     const str = 'abc';
     const reg = /c$/;
     console.log(reg.test(str)); //true
  • (?=p):用来匹配p前面的位置,p是一个子表达式,比如一个字符‘a’,就会匹配a前面位置。我们知道位置是字符之间的空隙,所以用match会得到空字符,我们可以用replace方法来往某个字符前面添加东西。
     const str = 'abc';
     const reg = /(?=c)/g;
     console.log(str.match(reg))//['']
     console.log(str.replace(reg,'d')); //abdc
  • (?!p):用来匹配不是p前面的位置,用法跟(?=p)一样,这两个锚括号不能丢,根据字符意思理解即可,什么位置后面是p?什么位置后面不是p?还是很好记忆的。这两个方法是挺有用的技巧,如果我们想要获取某个特定字符后面的数据等,就可以找到此位置,然后做对应的操作,非常方便。
  • \b:用来匹配\w与\W之间的位置,\w用来匹配字母、数字、下划线,是[a-zA-z0-9_]的简写形式;\W是匹配不是\W匹配的字符,比如一些特殊字符!等。
   const str = '[abc]';
   const reg = /\b/g;
  console.log(str.replace(reg,'d')); //[dabcd]
  • \B:刚好与\b相反,我们可以看出正则很多都是对立的,总有一个与之相反的方法。\b与\B稍微特殊一点,可以用来匹配一些特殊字符的位置,实际应用的较少。
    const reg = /\B/g;
    console.log(str.replace(reg,'0')); //0[a0b0c]0

以上就是六种锚,它们两两对立。我们在记忆的时候可以对比着来记忆,这样也方便学习。

总结

正则位置就是空字符,也就是两个字符之间的空隙。一般位置会结合其他表示式使用,来匹配我们想要的结果。