JavaScript 正则表达式 重复
昨天,学习了一下JavaScript正则表达式的字符类,当然我们也就知道/\d/匹配的是数字,那么/\d\d/自然匹配的就是两位数了,同理/\d\d\d\d/匹配的就是四位数,可是如果我让你写出匹配8位数的正则表达式,您还真的要写8个\d啊?呵,其实正则表达式允许通过重复来描述具有循环性质的模式。
正则表达式的重复字符:
| 字符 | 含义 |
|---|---|
| {n,m} | 匹配前一项至少n次,但是不能超过m次 |
| {n,} | 匹配前一项n次,或更多次 |
| {n} | 匹配前一项恰好n次 |
| ? | 匹配前一项0次或1次,也就是说前一项是可选的。相当于{0,1} |
| + | 匹配前一项1次或多次,相当于{1,} |
| * | 匹配前一项0次或多次,相当于{0,} |
示例:
var pattern = /\d{2,4}/;
//如下正则内容匹配ab,abc,abcccc
var pattern = /abc*/;
//如下正则内容匹配ab,abbb
var pattern = /ab+/;
注意:在使用重复字符*和?时都要小心,由于 这些字符可能匹配前面字符的0个匹配,所以它们允许什么都不匹配。比如说正则表达式/a*/实际上还与bbbb也是匹配的,因为这个字符里含有0个字母a。
非贪婪的重复:
刚才我介绍的一些重复出神入化都会匹配尽可能多的字符,而且允许接下来的正则表达式继续匹配。因为说上述的重复是“贪婪”的。在JavaScript的正则表达式中,可以以非贪婪的方式进行重复,这本来是Perl5的一个特性,不过被JavaScript给实现了。
定义非贪婪的重复方法:只需要在重复字符后面加问号即可,例如:?? , ?+ , ?*甚至{1,5}?这也是可以的。
举例如下:
正常情况下/a+/匹配一个或多个字符a,将其应用到字符aaa上时,它与三个字母都匹配。但是/a+?/只匹配一个或多个必要的字
母a
例如/a*b/匹配的是一个或多个字母a后面加上一个字母b,其即匹配b,aaab,ab也匹配aab,但是如果将其改为非贪婪的重复时,即/a*b?/它则只匹配b,而不匹配ab,与aaab了。
文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/08/03/1302/
版权所有 © 转载时必须以链接形式注明作者和原始出处!
这次看明白了,写的很清楚,不过匹配通常用来做什么用呢。
[回复]
继续躲猫猫!
[回复]
@LAONB
其实你可以把匹配理解为规则限制或者是筛选。只要匹配你的规则的,才是你想要的数据。
还比如说在一堆字符串里面,你要找出所有的 http www 这就需要设置规则。呵。
[回复]
@JiaCheng
呃。。藏好哈。别出声。。
[回复]
还没用过正则呢
[回复]
:x 不是一个层次的。。我根本看不懂。。
[回复]
@阿东
呃,术业有专攻而已。。兄弟是做哪行的?
[回复]
@要饭的
我用的也不多。呵呵。不过感觉有一些用处就记一下。
[回复]
还没有用过正则
[回复]
@仁心博客
只有特定环境会用到。呵呵。
[回复]
@simaopig
这样就理解了。看来是个十分必要的功能。
[回复]
@simaopig
我啊。只是个电脑爱好者
[回复]
@阿东
呵呵,电脑爱好者,我刚大学的时候也是。尤其是软件,收集了好些。
[回复]