正则表达式预查的详细解释与应用实例

2022-09-03 13:58:45
目录
解释应用难点-为什么.?[^#/n]?.*?不行总结 

解释

预查又称环视(Lookaround)、属于零宽断言(Zero-Length>

语法中文名英文名
(?=regex)肯定性前瞻Positive lookahead
(?!regex)否定性前瞻Negative lookahead
(?<=regex)肯定性后顾Positive lookbehind
(?<!regex)否定性后顾Negative lookbehind

比较通俗的解释:

    肯定性:匹配 regex否定性:不匹配 regex前瞻:向前(右、正向)看(预查)后顾:向后(左、反向)看(预查)肯定性前瞻:先看看前方(右边)是否匹配 regex,但不向前走否定性前瞻:先看看前方(右边)是否不匹配 regex,但不向前走肯定性后顾:回头看后方(左边)是否匹配 regex否定性后顾:回头看后方(左边)是否不匹配 regex

    为什么右边是正向、前向,左边是反向、后向?

    因为正则是从左往右匹配的,就像一个人在走,那么向前看(前瞻)就是右边、正向,向后看(后顾)就是左边、反向,特别注意不要和前缀后缀搞混

    应用

    1、判断是否同时包含但不限于大写字母、小写字母和数字,且不能包含 114514,长度为>

    /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?!.*114514).{8,32}$/.test('10086@qq.COM')
    // true

    2、判断不以 8082848688 开头

    /^(?!8[02468])\d+$/.test('81789110')
    // true

    3、匹配由空白分割的字符串中的纯数字串

    '123 abc   1st\r\n4   1970\'s 56 @10086 789'.match(/(?<!\S)\d+(?!\S)/g)
    // ['123', '4', '56', '789']
    '123 abc   1st\r\n4   1970\'s 56 @10086 789'.match(/(?<=^|\s)\d+(?=\s|$)/g)
    // ['123', '4', '56', '789']

    4、仅删除夹在数字中的逗号

    'And then, I have 1,003,334, you have 996,6,6,6'.replace(/(?<=\d),(?=\d)/g, '')
    // 'And then, I have 1003334, you have 996666'

    5、在数字中添加分组逗号

    'And then, I have 1003334, you have 996666'.replace(/(?<=\d)(?=(?:\d{3})+(?!\d))/g, ',')
    // 'And then, I have 1,003,334, you have 996,666'

    6、判断是否仅包含字母,但不包含小写元音字母

    /^(?:(?![aeiou])[A-Za-z])+$/g.test('src')
    // true
    /^(?=[A-Za-z]+$)[^aeiou]+$/g.test('src')
    // true

    7、判断是否是字母或数字或字母+数字,不能为空

    /^(?=.)[a-z]*\d*$/i.test('Add1')
    // true

    8、匹配长度为 11 的号码,注意不能是其他号码的子串

    `name:123456789
    id:11012345678910
    tel:12345678910
    name:abc11111111111
    id:888888888888
    tel:11966`.match(/(?<!\d)\d{11}(?!\d)/g)
    // ['12345678910', '11111111111']

    9、如果缺少协议前缀,则添加 http://,忽略空行

    String.raw`segmentfault.com
    //bing.com
    \baidu.com
    
    127.0.0.1
    ftp://127.0.0.1
    
    https://google.com
    
    `.replace(/^(?![a-z]+:)[\\/]*(?=.)/gim, 'http://')
    /*
    http://segmentfault.com
    http://bing.com
    http://baidu.com
    
    http://127.0.0.1
    ftp://127.0.0.1
    
    https://google.com
    
    */

    难点-为什么.?[^#/n]?.*?不行

      .?[^#/n]?.*?<VirtualHost.?[^#/n]?相当于无,最后的.*?又匹配上了#号(?<!.?#.?)来说就是一个整体,所有满足要求

      总结 

      到此这篇关于正则表达式预查的详细解释与应用的文章就介绍到这了,更多相关正则表达式预查内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!