.*? 和 .*的區別

在看js代碼的時候,有時候會遇到 .*? 這樣的寫法,那麼連續兩個限制符是什麼意思呢?我們先來回顧一下正則表達式的基本知識。

基本語法

符號 用法
. 匹配除“\r\n”之外的任何單個字符。要匹配包括“\r\n”在內的任何字符,請使用像“[\s\S]”的模式。
? 匹配前面的子表達式0到1次
* 匹配前面的子表達式人任意次
+ 匹配前面的子表達式一次或多次(大於等於1次)

懶惰匹配

表達式 .* 的意思很好理解,就是單個字符匹配任意次,即貪婪匹配。
表達式 .*? 是滿足條件的情況只匹配一次,即懶惰匹配

這是什麼 意思?我們用例子來解釋。

var str = 'Anna is {age} years old,Bob is {age} years old too';
var expr = /{.*?}/g;
console.log(str.replace(expr, '13'));

命令行輸出: Anna is 13 years old,Bob is 13 years old too

可以看出,懶惰模式下,只要滿足條件,就不再向後匹配,以下是貪婪模式:

var str = 'Anna is {age} years old,Bob is {age} years old too';
var expr = /{.*}/g;
console.log(str.replace(expr, '13'));

命令行輸出: Anna is 13 years old too

中間所有滿足條件的都被替換了

注意

像 .+* 以及 .*+這種表達式是錯誤的,命令行會報錯。如果希望貪婪匹配,直接 .* 或者 .+就可以

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章