带 am/pm 的时刻
匹配带 am/pm 的时刻。两端都锚住了,整个字符串合上才算通过。没有捕获组。
表达式
/^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$/i- 匹配范围
- 整个字符串
- 捕获组
- 0
- 标志
- i · 不分大小写
- 在第一个例子里抓到的部分
- 9:05 am
自己试一试
随便输入一段文字,这个式子抓到的部分就会高亮出来。全部在你的浏览器里运行,不会发往任何地方。
9:05 am
匹配到 1 处
匹配的例子
- 9:05 am
- 12:30pm
不匹配的例子
- 13:00 pm
- 9:60 am
同一类的其他式子
^rgb\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*\)$rgb() 形式的颜色值^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ISO 格式的日期^(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}$用斜杠写的日期^(?:[01]\d|2[0-3]):[0-5]\d$24 小时制的时刻^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$完整的 ISO 时间戳^P(?=\d|T\d)(?:\d+Y)?(?:\d+M)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$ISO 格式的时长^\d+\.\d+\.\d+(?:-[0-9a-z.-]+)?(?:\+[0-9a-z.-]+)?$语义化版本号^\d+$不带符号的整数怎么看这一页
- 两端加上 ^ 和 $,整个字符串就必须合上;不加,匹配落在文中任何位置都行。用来做输入校验的式子,一定要加锚。
- 圆括号 ( ) 会把括住的部分捕获下来。只是想分组的话写成 (?: ),后面各组的编号才不会往后挪。
- 这里的每个式子都拿它自己的例子跑过。不过「长得像电子邮件」和「真有这个信箱」始终是两回事。
- 开放式重复层层嵌套(比如 (a+)+)时,遇到某些输入耗时会爆炸式增长。把别人的式子粘进代码前,先找找有没有这种形状。
常见问题
Q. 匹配带 am/pm 的时刻的正则表达式是什么?
^(?:0?[1-9]|1[0-2]):[0-5]\d\s?(?:am|pm)$,标志用 i。
Q. 哪些字符串能匹配?
像 9:05 am 这样的文字能匹配,像 13:00 pm 这样的不能。
Q. 必须整个字符串都匹配吗?
是的。它被 ^ 和 $ 括住,只有整串合上才算通过。
Q. 抓到的内容怎么用?
没有捕获组,所以只会返回整段匹配(match[0])。只需要其中一部分的话,把那一段用圆括号括起来。