Javascript正則表達(dá)式里的貪婪匹配指的是在匹配過(guò)程中盡可能多的匹配字符,直到條件不滿足為止。比如下面這個(gè)例子:
let str = "abcdefg"; let result = str.match(/a.*g/); console.log(result[0]);
輸出結(jié)果為"abcdefg",這就是因?yàn)槠ヅ溥^(guò)程中會(huì)盡可能的匹配多的字符來(lái)滿足條件。而如果我們把正則表達(dá)式改成/a.*?g/,則會(huì)輸出"abg",這里使用了非貪婪匹配,只匹配必要的字符。
我們?cè)賮?lái)看一個(gè)例子:
let str = "aaaabbbbccccddddeeee"; let result = str.match(/a.*e/); console.log(result[0]);
輸出結(jié)果為"aaaabbbbccccddddeeee",這也是因?yàn)槟J(rèn)的貪婪匹配盡可能多的匹配字符。不過(guò)我們可以通過(guò)修改正則表達(dá)式來(lái)實(shí)現(xiàn)非貪婪匹配:
let str = "aaaabbbbccccddddeeee"; let result = str.match(/a.*?e/); console.log(result[0]);
輸出結(jié)果為"aaaa",可以看到通過(guò)使用非貪婪匹配,我們只匹配了必要的字符。
那么如何在代碼中使用非貪婪匹配呢?可以通過(guò)在量詞后加上問(wèn)號(hào)"?"來(lái)實(shí)現(xiàn):
let str = "abaacdacbabbccc"; let result = str.match(/a.+?c/); console.log(result[0]); //輸出"aac"
在處理正則表達(dá)式時(shí),必須要悉知貪婪匹配和非貪婪匹配之間的區(qū)別,可以讓我們更加靈活的操作字符串。