js中貪婪和惰性匹配


正則表達的匹配模式包括了貪婪匹配,惰性匹配和支配性匹配。由於js中沒有支配性匹配,所以這里我主要介紹一下前兩者。

貪婪匹配:

  表示方法:簡單量詞都是貪婪匹配。(? , * , +)

  描述:貪婪匹配是先匹配整個字符串,匹配原則類似在正則表達式末尾加上$。如果匹配失敗,則去掉最末位,重新進行上一個操作。直到匹配成功(這里需要進行最大量匹配,比如說/.*aa/,則會匹配到aa之前的所有字符,而不僅僅是aa之前第一個),如果是全局匹配,匹配成功之后還可以在此基礎上繼續進行匹配操作,或者是匹配失敗。

  示例:

    var temArr = "abzbaabxbaaabcb12";  //(用網上比較流行的例子稍作變化來演示)

    var regex = /.*b.{1}b/g;

    var result = temArr.match(regex);

    alert(result.length);   //3

    alert(result[0]);     //abzb

    alert(result[1]);   //abxb

    alert(result[2]);   //abcb

    下面演示一下具體的操作:

    "abzbaabxbaaabcb12".match(/.?b.{1}b$/g)  //null

    "abzbaabxbaaabcb1".match(/.?b.{1}b$/g)  //null

    "abzbaabxbaaabcb".match(/.?b.{1}b$/g)  //abcb(保存)

    "abzbaabxbaaabc".match(/.?b.{1}b$/g)  //null

    "abzbaabxb".match(/.?b.{1}b$/g)  //abxb(保存)

    "abzbaabx".match(/.?b.{1}b$/g)  //null

    "abzb".match(/.?b.{1}b$/g)  //abzb(保存)

    值得注意的是,雖然演示中保存的順序是從右到左abcb,abxb,abzb,但是輸出順序仍然是按照從左到右的順序abzb,abxb,abcb

惰性匹配:

  表示方法:在量詞后面添加'?'。(?? , *? , +?)

  描述:惰性匹配與貪婪匹配正好相反,是從左往右進行匹配。先匹配第一個字符(匹配方式與上面貪婪匹配一樣,在正則表達式后面添加$),如果第一個數據匹配失敗,則新添加一個字符。直到匹配成功,如果是全局匹配,匹配成功之后還可以在此基礎上繼續進行匹配操作。

  示例:

    var temArr = "abzbaabxbaaabcb12";

    var regex = /.*?b.{1}b/g;

    var result = temArr.match(regex);

    alert(result.length);   //3

    alert(result[0]);     //abzb

    alert(result[1]);   //aabxb

    alert(result[2]);   //aaabcb

    下面演示一下具體的操作:

    "a".match(/.*?b.{1}b$/g)  //null

    "abzb".match(/.*?b.{1}b$/g)  //abzb(保存)

    "a".match(/.*?b.{1}b$/g)  //null

    "aabxb".match(/.*?b.{1}b$/g)  //aabxb(保存)

    "a".match(/.*?b.{1}b$/g)  //null

    "aaabcb".match(/.*?b.{1}b$/g)  //aaabcb(保存)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM