http://blog.csdn.net/AXWolfer/archive/2009/04/20/4094152.aspx
贪婪模式:
匹配的原理是,先读进整个的字符串(所以叫贪婪),若读进的字符串与表达式匹配则停止,否则去掉最后一个字符,继续匹配
直到匹配表达式,或者找不到匹配。
非贪婪模式:
匹配的原理是,先读进一个字符(所以叫非贪婪),和表达式进行匹配,若不匹配则继续读进一个字符和表达式匹配,直到字符串的最后一个字符。
支配模式:
将整个的字符串和表达式匹配,若不匹配就不再进行。try{
str="<p>abcdefg</p><p>abcdefghijkl</p>";re1=str.match(/<p>[\W\w]+?<\/p>/ig);
alert("非贪婪模式:\r\n\r\n1:"+re1[0]+"\r\n2:"+re1[1]);re1=str.match(/<p>[\W\w]+<\/p>/ig);
alert("贪婪模式:\r\n\r\n"+re1.join(','));re1=str.match(/<p>(.+?)<\/p>/i);
alert("非贪婪模式,且不要标记:\r\n\r\n1:"+re1[1]);re1=str.match(/<p>(.+)<\/p>/i);
alert("贪婪模式,且不要标记:\r\n\r\n"+re1[1]);
}catch(e){alert(e.description)}本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/AXWolfer/archive/2009/04/20/4094152.aspx先介绍下string类型的match方法,参数为正则表达式,返回的是包含了匹配的结果的数组
若正则表达式中包含了标志g,match方法返回的是就是出现在字符串中的所有匹配。若不包含标志g,返回的还是一个数组,
第一个元素是匹配的字符串,而余下的元素是匹配的分组的字符串。仔细看下边的结果输出。
第一个输出是:<p>abcdefg</p><<p>abcdefghijkl</p>
很明显既然是非贪婪模式并且是带有标志g,是从字符串的开始依次读进。匹配了上边的两个字符串。
第二个输出是:<p>abcdefg</p><p>abcdefghijkl</p>
该正则是带有标志g的贪婪模式,首先读进整个的字符串,和表达式匹配。
第三个输出是:<p>abcdefg</p>,abcdefg
不带全局标志,匹配到第一个就停止不在匹配,结果数组中的re1[1]中存储的是分组(.+?)匹配的字符串。
第四个输出是:<p>abcdefg</p><p>abcdefghijkl</p>,abcdefg</p><p>abcdefghijkl
同样的道理数组中的第一个元素存储的是整个匹配的字符串,第二个是和分组(.+)匹配的字符串。
今天看了这篇文章,觉得得和大家讨论讨论。