为什么RegExp"贪婪"模式不起作用?

Gre*_*een 0 javascript regex quantifiers regex-greedy

我不明白这种行为.我有这样的例子,需要抓住html评论.

var str = '.. <!--My -- comment test--> ';

var regex1 = /<!--[.]*-->/g;
var regex2 = /<!--.*-->/g;

alert(str.match(regex1));      // null
alert(str.match(regex2));      // <!--My -- comment test--> 
Run Code Online (Sandbox Code Playgroud)

第二个正则表达式regex2正常,输出正是所需的.第一个节目null.我不明白其中的区别.RegExpressions <!--[.]*--><!--.*-->意思相同 - " <!--除了换行符之外的任何字符,从0开始到尽可能多,并以-->" 完成".但对于第二个它是有效的,而第一个没有.为什么?

UPD.我已阅读评论并有更新.

var str3 = '.. <!--Mycommenttest--> ';
var str4 = '.. <!--My comment test--> ';

var regex3 = /<!--[\w]*-->/g;
var regex4 = /<!--[\s\S]*-->/g;

alert(str.match(regex3));         // <!--Mycommentstest-->
alert(str.match(regex4));         // <!-- My comment test -->
Run Code Online (Sandbox Code Playgroud)

所以可以使用有限的匹配变量来匹配任何东西.那么应该采用哪种方式正确使用RegExps?有[]没有?无法得到差异,两者都给出正确的输出.

sid*_*yll 5

点(.)并不意味着字符类中的"任何东西".为什么你需要一个字符类来匹配任何东西?