欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript 正則 饑餓

宋博文1年前6瀏覽0評論

Javascript正則表達式可以說是Js中最重要的內容之一。它能解決很多字符串匹配的問題。比如想判斷一個字符串是否為合法的郵箱地址,是否為有效的手機號等。然而,在匹配字符串時,一旦遇到貪婪和惰性這兩種匹配模式,它們的饑餓程度就展現無遺了。下面,我們就來看看這兩種匹配模式的區別。

貪婪模式(Greedy Quantifier)是指在匹配字符串時,會盡可能地去匹配滿足條件的最長字符串,而不是找到就返回。比如,如下代碼:

let str = "aaaab";
let result = str.match(/a+/g);
console.log(result);
它的輸出結果為:['aaaa']。這是因為貪婪模式會盡可能地匹配到最長的符合匹配規則的字符串,所以結果就是它所匹配到的最長字符串。

相對地,惰性模式(Lazy Quantifier),又稱為非貪婪模式,是指在匹配字符串時,會盡可能地去匹配滿足條件的最短字符串,而不是找到就返回。比如,如下代碼:

let str = "aaaab";
let result = str.match(/a+?/g);
console.log(result);
它的輸出結果為:['a', 'a', 'a', 'a'],這是因為惰性模式會盡可能地匹配到最短的符合匹配規則的字符串,所以結果就是它所匹配到的最短字符串。

貪婪模式在匹配時會盡量匹配到符合模式的最長字符串,如果不是它需要的話,就不會回溯。而惰性模式則嘗試利用回溯,使匹配的長度最短。下面再來看一個正則表達式中,貪婪模式與惰性模式的差異。

let str = "
123
456
789
"; let result1 = str.match(/
.*<\/div>/g); let result2 = str.match(/
.*?<\/div>/g); console.log(result1); console.log(result2);
輸出結果為:['
123
456
789
'] 和 ['
123
', '
456
']。由此可見,貪婪模式的輸出結果是整個匹配的字符串,而惰性模式將匹配結果切成了三個部分,輸出了每個匹配結果的最短字符串。

在實際開發中,我們可以根據具體需求來選擇使用貪婪模式還是惰性模式。如果想要匹配最長的字符串,就使用貪婪模式;如果想要匹配最短的字符串,就使用惰性模式。當然,也可以使用正則表達式元字符“?”來定義非貪婪模式。

let str = "aaaab";
let result = str.match(/a+??/g);
console.log(result);
它的輸出結果同惰性模式:['a', 'a', 'a', 'a']。

綜上所述,貪婪模式和惰性模式是在匹配字符串時經常會遇到的問題。需要我們根據實際情況來選擇使用哪一種模式。同時,以正則表達式元字符“?”來表示非貪婪匹配,也是我們必須掌握的知識點。