zoukankan      html  css  js  c++  java
  • 捕获组和前后查找

    捕获组()

    捕获的顺序由左括号出现的顺序决定。

    引用

    被正则表达式匹配到的字符串会被暂存起来,其中分组捕获的串从1开始编号,$1表示第一个被捕获的串,$2是第二个,以此类推,我们可以引用这些串。

    var reg = /(d{4})-(d{2})-(d{2})/
    var data = '2017-10-24'
    reg.test(data)
    RegExp.$1//2017
    RegExp.$2//10
    RegExp.$3//24
    

    反向引用

    可以在同一个正则表达式中对前面的内容反向引用,反向引用的方式为+数字。

    var reg = /(w{3}) is 1/
    console.log(reg.test('dot is dot'))//true
    console.log(reg.test('dolby is dolby'))//false
    console.log(reg.test('dot is tod'))//false
    console.log(reg.test('dolby is dlboy'))//false
    

    非捕获组(?: )

    有时我们只是想分个组,并没有捕获的需求,这种情况下可以使用非捕获性分组,语法为(?: )

    var reg = /(?:d{4})-(d{2})-(d{2})/
    var date = '2017-10-24'
    console.log(reg.test(date))//true
    console.log(RegExp.$1)//10
    console.log(RegExp.$2)//24
    

    这个例子中,(?:d{4})分组不会捕获任何串,所以$1为(d{2})捕获的串。

    前瞻(?=)

    正向前瞻

    前面会有一个模式串,正则表达式匹配的内容需要满足:与该模式串匹配,且它后面出现的字符串和前瞻表达式中?=后的模式串匹配。

    var reg = /dot is a (?=doubi)/
    console.log(reg.test('dot is a doubi'))//true
    console.log(reg.test('dot is a shadou'))//false
    

    dot is a后面要跟上doubi才匹配成功。

    反向前瞻

    即后面不能出现满足某种模式的字符串。

    var reg = /dot is a (?!doubi)/
    console.log(reg.test('dot is a doubi'))//false
    console.log(reg.test('dot is a shadou'))//true
    

    dot is a后面除了跟上doubi,都能匹配成功。

    后瞻(?<=)

    和前瞻类似,只不过是匹配的内容需要满足的是:前面出现内容匹配某个模式串。

    参考

    [1]正则捕获组

  • 相关阅读:
    思维导图
    网络面经
    2.17 C++ 专项练习 错题复盘
    C++面经
    2.15 C++专项练习 错题复盘
    uboot下读取flash,上传tftp服务器、下载
    Hi3516EV100烧录出厂固件
    用Hi3518EV200板当spi烧录器
    生而为人,我很抱歉!深夜爬虫, 我很抱歉 ,附微信 “ 网抑云” 公众号爬虫教程!
    阿里HR: 你会 Android 实现侧滑菜单-design吗? CN看了,原来这么简单呀!
  • 原文地址:https://www.cnblogs.com/Frank-Hong/p/14596838.html
Copyright © 2011-2022 走看看