区别还是很明显的,在用正则的时候一定要注意|(或)的使用
var reg=/^(0?[1-9])|([1-2]\d)|(3[0-1])$/;  意思匹配三种情况1.匹配开头 带0或者不带0 ,然后匹配非0数字
2.匹配1或2,后跟任意数字
3.匹配3,后跟0或1,然后为结束标记而var reg=/^((0?[1-9])|([1-2]\d)|(3[0-1]))$/; 利用括号将或括起来,那么必须匹配开始标记,然后匹配或中的三个调剂,最后必须匹配结束标记。

解决方案 »

  1.   

    不加括号的还是不大明白 ,如果我使用不加大括号的这个正则表达式,当我输入1111的时候,前面两个1是按照([1-2]\d)来匹配的话,后面两个1难道还是([1-2]\d)来匹配的吗?,这样说的话,([1-2]\d)可以匹配无穷次了,var reg=/^(0?[1-9])|([1-2]\d)|(3[0-1])$/和var reg=/^(0?[1-9])*|([1-2]\d)*|(3[0-1])*$/这两个不就是没什么区别了吗?
      

  2.   

    额,终于看明白了,以前我一直以为写一个正则必须在^和$之间写,而忽略了这两个字符本身的含义,其实var reg=/^(0?[1-9])|([1-2]\d)|(3[0-1])$/; 可以分成三种情况来判断 分别是 
    reg1=/^(0?[1-9])/
    reg2=/([1-2]\d)/
    reg3=/(3[0-1]$/