• 正则系列之断言Assertions



    断言的组成之一是边界。对于文本、词或模式,边界可以用来表明它们的起始或终止部分(如向前断言,向后断言以及条件表达式)。

    1、边界类断言

    1.1、^

    匹配输入的开头。如果多行模式设为 true,^换行符后也能立即匹配。

    let reg = /^1[3-9]\d{9}/gm;
    let str = "25000000000";
    reg.test(str); // false
    str = "15000000000\n17000000000";
    let found = str.match(reg); // ['15000000000', '17000000000']
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.2、$

    匹配输入的结束。如果多行模式设为 true,$换行符前也能立即匹配。

    let reg = /^1[3-9]\d{9}7$/gm;
    let str = "25000000000";
    reg.test(str); // false
    str = "15000000000\n170000000007";
    let found = str.match(reg); // ['170000000007']
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.3、\b

    匹配一个单词的边界(边界包括换行符和空格),这是一个字的字符前 / 后没有另一个字的字符位置。

    let reg = /\bm/gm;
    let str = "month\nmoom";
    str.match(reg); // ['m', 'm']
    reg = /th\b/gm;
    str = "month\nthird";
    str.match(reg); // ['th']
    str = "month\nsomething";
    str.match(reg); // ['th']
    str = "month  ufo";
    str.match(reg); // ['th']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.4、\B

    匹配非单词边界。

    let reg = /on\B/gm;
    let str = "at noon";
    str.match(reg); // null
    str = "noon noon\nnoon";
    str.match(reg); // null
    str = "ongoing";
    str.match(reg); // ['on']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、其他断言

    2.1、x(?=y)

    向前断言: x 被 y 紧随时匹配 x,结果不包括 y。

    let reg = /\d(?=y)/g;
    let str = "1y2y3";
    str.match(reg); // ['1', '2']
    
    • 1
    • 2
    • 3

    2.2、x(?!y)

    向前否定断言: x 没有被 y 紧随时匹配 x。

    let reg = /\d(?!y)/g;
    let str = "1y2y3";
    str.match(reg); // ['3']
    
    • 1
    • 2
    • 3

    2.3、(?<=y)x

    向后断言: x 跟随 y 的情况下匹配 x,结果不包括 y。

    let reg = /(?<=y)\d/g;
    let str = "y1y23";
    str.match(reg); // ['1', '2']
    
    • 1
    • 2
    • 3

    2.4、(?<!y)x

    向后否定断言: x 不跟随 y 时匹配 x。

    let reg = /(?<!y)\d/g;
    let str = "y1y23";
    str.match(reg); // ['3']
    
    • 1
    • 2
    • 3

    后记

    如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
    如果你觉得该文章有一点点用处,可以给作者点个赞;\\*^o^*//
    如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L~~~///(^v^)\\\~~~
    谢谢各位读者们啦(^_^)∠※!!!

    在这里插入图片描述

  • 相关阅读:
    VS2022升级之后,原有项目出现异常
    TypeScript 泛型类型
    IOC 和 AOP
    极智AI | 昇腾开发环境搭建 CANN & MindStudio (无坑版)
    计算顺序表中值在100到500之间的元素个数
    Java中的<<、>>、>>>运算符
    Docker实战
    【ROS】Nav2源码之nav2_controller详解
    Spring IoC 入门学习笔记
    TOUGH2系列建模方法及在CO2地质封存、水文地球化学、地热、地下水污染等领域中的实践技术应用
  • 原文地址:https://blog.csdn.net/weixin_62277266/article/details/125534557