zoukankan      html  css  js  c++  java
  • 正则表达式中的贪婪、惰性、支配性的量词

    转自:http://blog.csdn.net/cyai/article/details/2297951

    使用正则表达式中的贪婪、惰性、支配性的量词可以控制表达式匹配过程,我们知道量词?、*、+的意义,可以指定相关模式出现的次数,默认的情况下我们使用 的是贪婪量词,它的匹配过程是从整个字符串开始查看,如果不匹配就去掉最后一个,再看看是否匹配,如此循环一直到匹配或字符串空为止,如:
    var s = "abbbaabbbaaabbb1234";
    var re1=/.*bbb/g;     //*是贪婪量词
    re1.test(s);
    这个匹配过程将从整个字符串开始:
    re1.test("abbbaabbbaaabbb1234");   //false  ,则去掉最后一个字符4再继续
    re1.test("abbbaabbbaaabbb123");   //false  ,则去掉最后一个字符3再继续
    re1.test("abbbaabbbaaabbb12");   //false  ,则去掉最后一个字符2再继续
    re1.test("abbbaabbbaaabbb1");   //false  ,则去掉最后一个字符1再继续
    re1.test("abbbaabbbaaabbb");   //true ,结束

    在贪婪量词的后面加多一个?就变成了惰性量词,它的匹配过程相反,是从前面第一个开始,不匹配则加一个,如此循环直到字符串结束,以上面的为例子。
    var s = "abbbaabbbaaabbb1234";
    var re1=/.*?bbb/g;     //*?是惰性量词
    re1.test(s);
    它的匹配过程如下:
    re1.test("a");      //false,  再加一个
    re1.test("ab");      //false,  再加一个
    re1.test("abb");      //false,  再加一个
    re1.test("abbb");      //true,  匹配了,保存这个结果,再从下一个开始
    re1.test("a");      //false,  再加一个
    re1.test("aa");      //false,  再加一个
    re1.test("aab");      //false,  再加一个
    re1.test("aabb");      //false,  再加一个
    re1.test("aabbb");      //true,  匹配了,保存这个结果,再从下一个开始
    ......

    支配性量词就是只检查整个字符串,很多浏览器不支持,故不再举例。

  • 相关阅读:
    论面向服务架构(SOA)设计及其应用
    论MVC架构设计模式分析
    软件架构理论与实践读后感(一)
    视频全量分析规划书
    架构实战—软件架构设计的过程读后感(三)
    架构实战—软件架构设计的过程读后感(二)
    第8周周总结
    Refined Architecture阶段阅读笔记
    visual studio2010编译过程中出现COFF文件损坏的原因和方法总结
    解决visual studio 2013编译过程中存在的无法打开kernel.lib问题
  • 原文地址:https://www.cnblogs.com/c-961900940/p/4042220.html
Copyright © 2011-2022 走看看