这个正则哪里写错了?

guan_tu 2014-03-09 02:57:20
在验证生日的日时
表达式为var reg=/^(0?[1-9])|([1-2]\d)|(3[0-1])$/;
然后输入1111也符合要求 但是当我改为
var reg=/^((0?[1-9])|([1-2]\d)|(3[0-1]))$/;就正常了,请问这两者有什么区别吗?
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
guan_tu 2014-03-09
  • 打赏
  • 举报
回复
引用 1 楼 Return_false 的回复:
区别还是很明显的,在用正则的时候一定要注意|(或)的使用 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])$/; 可以分成三种情况来判断 分别是 reg1=/^(0?[1-9])/ reg2=/([1-2]\d)/ reg3=/(3[0-1]$/
licip 2014-03-09
  • 打赏
  • 举报
回复
楼上几位其实说的很明白。 你再好好去理解理解。
guan_tu 2014-03-09
  • 打赏
  • 举报
回复
引用 4 楼 Return_false 的回复:
如果加上开始和结束
我的表达式中有开始和结束的标志,我还是不能理解"|"加上括号和不加括号的区别
  • 打赏
  • 举报
回复
匹配的概念是什么,我想你应该去了解一下什么是正则的惰性匹配和贪婪匹配模式 对于字符串1111来讲,匹配是值找到符合正则的子串,很明显前面两个11已经匹配成功了,由于惰性不在继续匹配,那么即可返回匹配成功 如果加上开始和结束,那么字符串必须符合开始结束之间的匹配规则,而1111的串开始结束之间有四个数字,正则匹配括号中的两个数字,所以不再匹配
guan_tu 2014-03-09
  • 打赏
  • 举报
回复
引用 1 楼 Return_false 的回复:
区别还是很明显的,在用正则的时候一定要注意|(或)的使用 var reg=/^(0?[1-9])|([1-2]\d)|(3[0-1])$/; 意思匹配三种情况 1.匹配开头 带0或者不带0 ,然后匹配非0数字 2.匹配1或2,后跟任意数字 3.匹配3,后跟0或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])*$/这两个不就是没什么区别了吗?
嘻哈大咖秀 2014-03-09
  • 打赏
  • 举报
回复
没有大括号的时候 是三个单一的元素 三种情况都可以 包含大括号以后就只能是三者其一
  • 打赏
  • 举报
回复
区别还是很明显的,在用正则的时候一定要注意|(或)的使用 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]))$/; 利用括号将或括起来,那么必须匹配开始标记,然后匹配或中的三个调剂,最后必须匹配结束标记。

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧