一、正則表達式貪婪和非貪婪區別
正則表達式中的貪婪模式是指正則表達式在匹配字符串的過程中,儘可能多地匹配字符,而非貪婪模式則相反,它儘可能少的匹配字符。
以下是一個小例子,對於字符串 “abc \d{3,5}? def \d{3,5} ghi”,我們想要匹配其中的數字:
var str = "abc 12345 def 678910 ghi"
var reg1 = /\d{3,5}/g
var reg2 = /\d{3,5}?/g
console.log(str.match(reg1)) // ["12345", "67891"]
console.log(str.match(reg2)) // ["123", "456", "789", "10"]
可以看出,使用貪婪模式的正則表達式匹配到的數字是儘可能多的,而使用非貪婪模式的則是儘可能少的。
二、正則表達式非貪婪模式
在正則表達式中,使用 “?” 可以將其後面的量詞標記為非貪婪模式,例如上面的例子:
var reg = /\d{3,5}?/g
其中 “?“ 將貪婪模式改為了非貪婪模式。
非貪婪模式與貪婪模式不同,其將儘可能少的匹配字符,例如:對於字符串 “abc 12345 def 678910 ghi”,使用非貪婪模式匹配數字,則會儘可能的少匹配數字,結果是每次匹配了3位數字。
三、js正則表達式貪婪模式
在 JavaScript 中,默認的正則表達式使用的是貪婪模式,也就是說,不需要使用 “?” 來設置非貪婪模式。例如:
var str = "abc 12345 def 678910 ghi"
var reg = /\d{3,5}/g
console.log(str.match(reg)) // ["12345", "678910"]
可以看到,使用 /\d{3,5}/g 正則表達式匹配到的數字是儘可能多的。
四、正則表達式貪婪和非貪婪
正則表達式貪婪模式和非貪婪模式的使用取決於需求,對於某些需要匹配儘可能多字符的情況可以使用貪婪模式,然而在某些情況下儘可能少的匹配字符可能會更加符合要求,此時可使用非貪婪模式。
以下是一個常見的例子,需要匹配一個 HTML 標籤中的內容:
var str = "<div><p>Hello</p></div>"
var reg1 = /<.+>/g
var reg2 = /<.+?>/g
console.log(str.match(reg1)) // ["<div><p>Hello</p></div>"]
console.log(str.match(reg2)) // ["<div>", "<p>", "</p>", "</div>"]
由於貪婪模式儘可能多的匹配字符,在這個例子中,使用 reg1 正則表達式匹配到的是整個 div 標籤加上其中的內容,而使用 reg2 則是匹配到標籤中的每一個部分。所以在某些情況下,使用非貪婪模式會更加符合需求。
五、正則表達式中的非貪婪模式
正則表達式中的非貪婪模式可以用 “?” 號來實現,例如 “.+?”。這樣表示非貪婪模式,正則表達式在匹配字符串的時候儘可能少的匹配字符。
以下是一個例子,需要將一段 HTML 代碼中的標籤全部替換成 “abc”:
var str = "<div><p>Hello</p></div>"
var reg = /<.+?>/g
console.log(str.replace(reg, "abc")) // "abcabc"
由於使用了非貪婪模式,”.+?” 會儘可能少的匹配字符,因此只會將標籤替換成一個”abc”。
六、正則表達式貪婪與非貪婪模式區別
正則表達式貪婪模式儘可能多的匹配字符,適用於需要匹配儘可能多字符的情況。而非貪婪模式則儘可能少的匹配字符,適用於需要匹配最短字符串的情況。
我們來看一個簡單的例子,需要匹配字符串中的字母:
var str = "abcde"
var reg1 = /.+/
var reg2 = /.+?/
console.log(str.match(reg1)) // ["abcde"]
console.log(str.match(reg2)) // ["a"]
可以看出,使用貪婪模式的正則表達式匹配到的是整個字符串,而使用非貪婪模式則只匹配到了第一個字符。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/248300.html