阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      正则捕获的 贪婪性

      写在前面

      正则的贪婪性,也有叫"贪心"表达式,“贪心"表达式对应的是"非贪心"表达式或者最小匹配。

      正则捕获贪婪性的检测

      还是之前的例子

      let str = "axihe2020an06bang30";
      let reg = /\d+/g;
      console.log(str.match(reg));
      

      我们运行后会发现,\d+总归捕获尽可能多的符合规则;

      比如\d+这个元字符可以捕获 1 个数字,也可以捕获 2 个连续数字,也可以捕获无数个连续的数字;

      但是实际运行的过程中,它尽可能的捕获到最大数量。

      正则捕获的贪婪性

      默认情况下,正则捕获的时候,按照当前正则匹配的最长结果来获取,这种尽可能多的获取叫正则捕获的贪婪性。

      ?可以取消捕获的贪婪性

      试一试下面的一个正则

      let reg = /\d+?/g;
      

      例子应用

      let str = "axihe2020an06bang30";
      let reg = /\d+?/g;
      console.log(str.match(reg));
      

      结果是 ["2", "0", "2", "0", "0", "6", "3", "0"];

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

      *、+ , ? 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

      ?在不同位置的不同的意义

      • ?左边是非量词元字符
        • 出现零到一次
      • ?左边是量词元字符
        • 取消捕获时候的贪婪性
      • ?: 只匹配不捕获
      • ?= 正向预查
      • ?! 反向预查
      目录
      目录