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"。 数字也是字符

  • 相关阅读:
    高斯消元学习
    HDU 4596 Yet another end of the world(解一阶不定方程)
    Codeforces Round #318 div2
    HDU 4463 Outlets(一条边固定的最小生成树)
    HDU 4458 Shoot the Airplane(计算几何 判断点是否在n边形内)
    HDU 4112 Break the Chocolate(简单的数学推导)
    HDU 4111 Alice and Bob (博弈)
    POJ 2481 Cows(线段树单点更新)
    HDU 4288 Coder(STL水过)
    zoj 2563 Long Dominoes
  • 原文地址:https://www.cnblogs.com/btgyoyo/p/6287485.html
Copyright © 2011-2022 走看看