我是这样认为的:
/<.*>/是所谓“贪心的”、“尽可能多的”匹配。所以其表现是:从“<”开始寻找结束标志">",当找到第一个“>”时它并不放弃,还继续往后找(因为它要尽量多的匹配),所以直到它找到最后一个">"时,才用其间经历过的所有字符来替换“.*”。所以在例子里他匹配的字符串是“H1>Chapter 1 – Introduction to Regular Expressions</H1”。
而/<.*?>/是所谓“不贪心的”、“尽可能少的”匹配。所以其表现是:从“<”开始寻找结束标志">",一旦找到第一个“>”时就停止,并其间经历的字符替换“.*?”。所以在例子里他匹配的字符串是“H1”。
/<.*>/是所谓“贪心的”、“尽可能多的”匹配。所以其表现是:从“<”开始寻找结束标志">",当找到第一个“>”时它并不放弃,还继续往后找(因为它要尽量多的匹配),所以直到它找到最后一个">"时,才用其间经历过的所有字符来替换“.*”。所以在例子里他匹配的字符串是“H1>Chapter 1 – Introduction to Regular Expressions</H1”。
而/<.*?>/是所谓“不贪心的”、“尽可能少的”匹配。所以其表现是:从“<”开始寻找结束标志">",一旦找到第一个“>”时就停止,并其间经历的字符替换“.*?”。所以在例子里他匹配的字符串是“H1”。
哪位高手能不能举个例子说的清楚一点呢?
s = "<h1>123</h1><h2>abc</h2>";
re = /(<.+>)/g;
alert(s.match(re));
re = /(<.+?>)/g;
alert(s.match(re));
</script>