三個例子理解正則匹配裏面的最小匹配和全局匹配

看正則的時候,遇到一些理解上的疑惑,一個是javascript

*?
+?

MDN上的解釋爲
Matches like * and + from above, however the match is the smallest possible match.java

如*,+同樣的匹配前面項,匹配是最小可能。code

另一個疑惑是參數g,這個的解釋是全局模式,但全局模式到底是什麼意思呢,最小匹配又是什麼意思呢?ip

先從最小匹配的例子開始看一下:字符串

var re =  /".*?"/;
'"foo""bar"'.match(re)
//return "foo"

MDN對最小匹配使用的是如上的例子,上例若是不用?最小匹配,則匹配不到"foo",咱們來試一下class

var re =  /".*"/;
'"foo""bar"'.match(re)
//return "foo""bar"

可見,若是不使用最小匹配,匹配一直進行到了字符串最後一個",前面的"被忽視掉,這種模式成爲貪婪模式,就是有多少匹配多少,當*或者+ 後面帶?,則採用最小匹配,當查找到第一次成功的匹配,就將匹配結果返回。co

那麼,全局匹配在這個例子裏會產生什麼樣的效果呢?字符

var re =  /".*?"/g;
'"foo""bar"'.match(re)
//return [""foo"", ""bar""]

最小匹配下原本只能匹配出第一個foo,而加上全局匹配,匹配會繼續進行,將後面的bar也匹配了出來。這或許就是全局匹配的一個應用。oss

相關文章
相關標籤/搜索