正则表达式的贪婪性以及总结?的五大作用()的三大作用

214 阅读1分钟

话不多说,先来看一道题

let str = "哈哈2019@2020嘿嘿";
let reg = /\d+/g;
console.log(str.match(reg)); //=>["2019","2020"]

问题来了,\d+代表的一到多次的数字,那为什么捕获的都是长数组,而不是像["2", "0", "1", "9", "2", "0", "2", "0"]这样一个一个捕获呢?

正则捕获的贪婪性:默认情况下,正则捕获的时候,是按照当前正则所匹配的最长结果来获取的

解决方法:

在量词元字符后面设置?:取消捕获时候的贪婪性(按照正则匹配的最短结果来获取)

reg = /\d+?/g;
console.log(str.match(reg)); //=>["2", "0", "1", "9", "2", "0", "2", "0"]

问号在正则中的五大作用:

  • 问号左边是非量词元字符:本身代表量词元字符,出现零到一次
  • 问号左边是量词元字符:取消捕获时候的贪婪性
  • (?:) 只匹配不捕获
  • (?=) 正向预查
  • (?!) 负向预查

括号在正则中的三大作用:

  • 加小括号可以改变优先级,让正则匹配的时候分组匹配
  • 小括号在捕获的时候可以分组捕获
  • 小括号可以实现分组引用