• 正则系列之断言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^)\\\~~~
    谢谢各位读者们啦(^_^)∠※!!!

    在这里插入图片描述

  • 相关阅读:
    docker 安装jenkins
    getBoundingClientRect、offset、page、client、screen相关API及释义合集
    〖大前端 - ES6篇②〗- let和const
    springboot+mybatis-plus实现读写分离
    springboot添加拦截器
    [Azure - VM] 重新部署VM
    TypeScript学习第二天:认识ts的数据类型
    离线数据处理——子任务一:数据抽取
    面试题005-Java-JVM(上)
    Open Earth Engine library——利用大津法(otsu)区分NDVI一个点的峰值(阈值)
  • 原文地址:https://blog.csdn.net/weixin_62277266/article/details/125534557