对正则/^[0-9]*$/不理解,求大神赐教

为什么/[0-9]*$/可以匹配FFF,/^[0-9]*/也可以匹配FFF,/^[0-9]*$/就不能匹配FFF呢?
/[0-9]*$/和/^[0-9]*/中的*,应该是取了0,所以匹配了FFF,为什么/^[0-9]*$/中的*不能取0呢?即没有数字开头也没有数字结尾。应该也是匹配FFF的啊!

[0-9]*$匹配的FFF是在FFF的结尾位置,^[0-9]*匹配FFF是匹配的开头位置,
所以正则的匹配重要的不在于它能否匹配,而在于它匹配定位在哪里,当无法定位的时候就意味着无法匹配
而^[0-9]*$的含义是:要么字符串中全是数字,要么是个完全空的字符串。因为从开头到结尾已经被你框死了,所以任何不符合上面条件的字符串都无法匹配定位。

 /^[0-9]*?$/试试看,因为默认js是贪婪匹配

这和贪婪非贪婪无关,贪婪非贪婪只决定了匹配字符串的长度,如果它本身就无法匹配,那加不加?都没意义

/^[0-9]*$/你这个限制了必须是字符串或者空字符

其他2个是数字开头或者结尾,由于是*,没有数字也会匹配

这就是正则匹配的基本概念,正则匹配不仅能匹配字符,还能匹配只位置。
[0-9]*的意思就是说:我要么匹配数字,要么匹配任意一个位置。因此它可匹配的位置如下:
F*F*F <-- 其中*就代表它能匹配的地方。你可以写代码扫描一下这个正则匹配后的所有位置和长度就能验证我的说法。

推荐一个博文:http://blog.csdn.net/lxcnn/article/details/4268033 很详细的讲解了正则匹配的原理