看正則的時候,遇到一些理解上的疑惑,一個是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