首页 > JavaScript > JavaScript 正则表达式 重复
2009八月3

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,}

示例:

//所有十位数,到四位数,包括:0000
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/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

13 Responses to “JavaScript 正则表达式 重复”

  1. #1 LAONB 回复 | 引用 Post:2009-08-04 13:07

    这次看明白了,写的很清楚,不过匹配通常用来做什么用呢。

    [回复]

  2. #2 JiaCheng 回复 | 引用 Post:2009-08-04 13:58

    继续躲猫猫!

    [回复]

  3. #3 simaopig 回复 | 引用 Post:2009-08-04 15:14

    @LAONB
    其实你可以把匹配理解为规则限制或者是筛选。只要匹配你的规则的,才是你想要的数据。

    还比如说在一堆字符串里面,你要找出所有的 http www 这就需要设置规则。呵。

    [回复]

  4. #4 simaopig 回复 | 引用 Post:2009-08-04 15:14

    @JiaCheng
    呃。。藏好哈。别出声。。

    [回复]

  5. #5 要饭的 回复 | 引用 Post:2009-08-04 16:21

    还没用过正则呢

    [回复]

  6. #6 阿东 回复 | 引用 Post:2009-08-04 17:15

    :x 不是一个层次的。。我根本看不懂。。

    [回复]

  7. #7 simaopig 回复 | 引用 Post:2009-08-04 17:28

    @阿东
    呃,术业有专攻而已。。兄弟是做哪行的?

    [回复]

  8. #8 simaopig 回复 | 引用 Post:2009-08-04 17:28

    @要饭的
    我用的也不多。呵呵。不过感觉有一些用处就记一下。

    [回复]

  9. #9 仁心博客 回复 | 引用 Post:2009-08-04 20:22

    还没有用过正则

    [回复]

  10. #10 simaopig 回复 | 引用 Post:2009-08-04 22:58

    @仁心博客
    只有特定环境会用到。呵呵。

    [回复]

  11. #11 LAONB 回复 | 引用 Post:2009-08-05 00:12

    @simaopig
    这样就理解了。看来是个十分必要的功能。

    [回复]

  12. #12 阿东 回复 | 引用 Post:2009-08-05 08:08

    @simaopig
    我啊。只是个电脑爱好者

    [回复]

  13. #13 simaopig 回复 | 引用 Post:2009-08-05 08:27

    @阿东
    呵呵,电脑爱好者,我刚大学的时候也是。尤其是软件,收集了好些。

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)