贪婪模式和非贪婪模式
2020-02-11 本文已影响0人
Zulu_c02a
贪婪模式
先看那个例子
var str = 'a ''witch" and her "broom" is one';
str.match(/".*"/g)
//[""witch" and her "broom""]
得到的是[""witch" and her "brom""],而并不是我们之前想到的"witch"和"broom",因为js的引擎在运行的时候,首先匹配双引号,匹配到开头的双引号,然后匹配
".*"(也就是除了回车和换行之外的所有字符),因为js引擎的机制会一直从a运行到e,这个时候才会匹配到最后的双引号,这个时候js引擎开始从最后往前匹配,匹配到的第一个双引号就作为数组元素的最后一个双引号,所以匹配到的是[""witch" and her "brom""]。这就是贪婪模式。
非贪婪模式
非贪婪模式与贪婪模式相反,通过在代表数量的标识符后面放置?来开启非贪婪模式,?的作用就是尽量的减少匹配。
看个例子
var str = 'a ''witch" and her "broom" is one';
str.match(/".*"/g)
//[""witch"", ""brom""]
得到的是"witch"和"brom"