javascript正则表达式(二)

首先,请复习javascript正则表达式(一)

本节的内容比较简单,主要包含”转义字符、匹配选项、量词“三个部分。下面步入正题。

第一、转义字符

* ? . 等一些符号在正则表达式中都具有特殊的函义,如果我们要匹配一个*号时,怎么办呢?比如我们要看一个字符串s是否含有*号,应该使用如下方式:

var s = "Hello, here is *";
// var reg = /*/; [*表示前面的内容重复0到多次,这样写会出错]

var reg = /\*/;

document.write (reg.test(s));
//结果为true

我们应该将*改用 \* 的形式。同样你就明白了  \.   \?  是何含义。再重申一遍:如果要匹配的符号中含有特殊符号,我们应该要转义。形如:\符号。

第二、匹配选项

在匹配字符串时,默认是区分大小写的,而且只匹配找到的第1项。也就意味只要匹配成功,将不再继续往下匹配。

关于大小写:只需要在/RegExp/后面加上i即可不区分大小写。形如:/[abcd]/i,表示匹配字母a或b或c或d,且不区分大小写。

关于匹配所有:只需要/RegExp/后面加上g即可。形如:/[abcd]/g,表示匹配所有a和b和c和d。换句话说,就是把所有的这些字母都找出来。

注:这两选项可以一起使用。如:/[abcd]/gi。含义你知道。

【举例一】把s中的所有的a替换为x:

做法一:

var s = "abcdabcc";
s
= s.replace("a", "x");

你成功替换了所有的a吗?当然没有!这时候请不要尝试用for或while来解决,继续往下看!

做法二:

var s = "abcdAbcc";
s
= s.replace(/a/g, "x");

这次你肯定成功的替换了。可是细心的读者可能会说”A“尚未替换。对的,因为它是大写嘛。如果你连它也要替换掉,你知道怎么做的。(提示:这两个选项可以一起使用)

第三、正则表达式中的量词

从一个问题看起吧,中国的邮政编码:由6位数字组成,不能多,不能少。所以,我们可以这样做:\d\d\d\d\d\d,真的很容易。不过javascript中的正则表达式其实有一个数量的表示方式,如下:

*    前面的内容可以重复出现0到多次

?    前面的内容可以重复出现0到1次

+    前面的内容可以重复出现1到多次

{n}   前面的内容刚好出现n次

{n,}    前面的内容至少出现n次

{n,m}    前面的内容出现n到m次都可以

还是举例来说明吧。

【例1】新身份证号码——/\d{18}/ 由18位数字组成。老身份证号码由15位组成。

【例2】手机号码——/\d{11}/

【例3】邮政编码——/\d{6}/

什么太简单了?一步步来吧!

【例4】用括号包含的整数,如:(123)——/[(]\d+[)]/,请不要使用:/(\d+)/。为什么?自己想想吧。

【例5】整数可以用()包含,也可以不包含。如(123)、123均可。分析如下:

( 可以有,可以没有。也就是说出现次数为0或1次。0或1次——与哪个量词有关?????。表示方式:/[(]?\d[)]?/

【例6】国内的电话号码,分析如下:

我们将电话号码分为区号、隔符、号码三部分吧。

区号:由括号包含(也可以不包含)3到4位数字 —— /[(]?\d{3,4}[)]?/

分隔:一般用 - 表示,且-两边可以有若干空格。也可没有分隔符,如:(0733)36998699形式的 —— /[ -]*/ 【-的前面有一个空格】

号码:由7到8位数字组成 —— /\d{7,8}/

再将这三个部分结合起来,就是一个国内电话号码的正则表达式了。综合如下:

/^[(]?\d{3,4}[)]?[ -]*\d{7,8}$/

现在,一步步认真的来,其实思路就清晰多了。学习正则表达式,需要用”❤“!

转载请注明:转载自web前端开发

posted @ 2011-04-06 18:07  北磬  阅读(2845)  评论(2编辑  收藏  举报

博客作者:北馨书生