正則表達的匹配模式包括了貪婪匹配,惰性匹配和支配性匹配。由於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(保存)
