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前端开发