zoukankan      html  css  js  c++  java
  • js正则表达式的贪婪匹配和惰性匹配

    量词*量词+ 都是默认的贪婪匹配,在量词后面加上问号?就改成了惰性匹配!

    什么是贪婪匹配?

    匹配过程是从整个字符串开始查看,如果不匹配就去掉最后一个,再看看是否匹配,如此循环一直到匹配或字符串空为止,如:

    vars ="abbbaabbbaaabbb1234";

    varre1=/.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 ,结束

    在贪婪量词的后面加多一个?就变成了惰性量词,它的匹配过程相反,是从前面第一个开始,不匹配则加一个,如此循环直到字符串结束,以上面的为例子。

    vars ="abbbaabbbaaabbb1234";

    varre1=/.?bbb/g;//?是惰性量词

    注意:?是加在bbb前面的,即紧跟对应的量词后面
    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, 匹配了,保存这个结果,再从下一个开始

    ......

  • 相关阅读:
    Insert Sort Singly List
    Binary Search Tree Iterator
    React的组件化
    React的虚拟DOM
    如何依靠代码提高网络性能
    读高性能JavaScript编程 第三章
    读高性能JavaScript编程 第二章 让我知道了代码为什么要这样写
    读高性能JavaScript编程 第一章
    固本培元之一:栈和堆
    学习笔记
  • 原文地址:https://www.cnblogs.com/lyzz1314/p/15650460.html
Copyright © 2011-2022 走看看