zoukankan      html  css  js  c++  java
  • 正则贪婪,非贪婪,分组,前瞻

    1.贪婪模式

    正则是:/d{3,5}/g,字符串是 12345678

    那么exec 方法或者match方法返回的结果是什么呢? 是 [123,456] 还是 [1234,5678] 还是[12345]

    答案是:[12345] . 正则表达式默认是贪婪模式,即尽可能多的匹配,如果失败那么减一匹配直到最小值。在这种情况下前面5个数字匹配后,下标来到6处,678不会再匹配

    2.非贪婪模式

    让正则表达式尽可能少的匹配,也就是说一旦成功匹配就不在继续尝试就是非贪婪模式

    只要在量词后加上?即可

    '123456789'.match(/d{3,5}?/g); 返回[123,456,789]

    3.分组反向引用

    2015-12-25 =》 12/25/2015

    可以这样。$n表示对应的分组.如果没有这样的分组那么就会把$n 当成字符串处理

    '2015-12-25'.replace(/(d{4})-(d{2})-(d{2})/g,'$2/$3/$1')

    栗子:

    'a1b2c3d4'.replace(/((wd){3})/g,'X$1xx'),返回结果"Xa1b2c3xxd4"

    4.忽略分组(只是利用分组,但确不捕获)

    不希望捕获某些分组只要在分组内加上?: 就可以

    栗子:

    'sasdadsssaaaattt'.replace(/(?:sss|ttt)/g,'X$1X')

    返回:
    "sasdadX$1XaaaaX$1X"

    4.前瞻与后顾

    1.正则表达式从文本头部向尾部开始解析,这样的解析方向称为'前'

    2.前瞻 就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻 方向相反

    3.Javascript 不支持后顾

    4.符合和不符合特定断言称为肯定/正向 匹配 和 否定/负向 匹配

    5.语法: exp(?=assert)  正向  exp(?!assert)   负向

    栗子:

    'a1b3c5'.replace(/w(?=d)/g,'X0X'),返回:"X0X1X0X3X0X5"。 数字部分并不会被替换

    'a1b3c5'.replace(/w(?!d)/g,'X0X'),返回: "aX0XbX0XcX0X"。 数字也是字符

  • 相关阅读:
    python 操作mysql
    openstack 与 VMware(vSphere) 不同
    python redis 实现订阅发布
    python redis 管道
    python rabbitMQ 实现RPC
    python 连接redis
    使用gdb
    在应用程序中如何打印调用栈
    如何使用coredump
    linux中常用命令
  • 原文地址:https://www.cnblogs.com/btgyoyo/p/6287485.html
Copyright © 2011-2022 走看看