javascript 正则表达式

来源:互联网 发布:什么比价软件好 编辑:程序博客网 时间:2024/05/16 17:25

创建正则的两种方式

javascript中,通过字面量或者RegExp创建正则表达式;本文章主要介绍两种创建方式的不同及正则表达式的常用方法(test、exec)。

字面量方式

创建正则最简单的方式,是字面量方式,模式如下

var reg=/pattern/flag;

正则由两部分组成,pattern和flag。

pattern是模式,是一个正则表达式;

flag是标志位,常用的有g、i;g是global全局匹配,i是insensitive,大小写不敏感。

test是正则最常用的方法之一,匹配返回true,反之,返回false

比如,匹配字符串中含有“name”

var reg=/name/; reg.test("myname");//true
var reg=/name/i;//大小写不敏感reg.test("mynaMe");//true

匹配特殊字符,需要对特殊字符进行转义,转义使用\ ,比如匹配字符串含有.name

var reg=/\.name/i;//使用了转义reg.test("my.naMeyourname");//true

开始和结尾(^和&)

开始和结尾是很重要的一环,比如判断整数的正则,这里没有写开始和结尾,匹配“234w”,结果居然是true,这是因为\d2匹配,所以是true,如果加上^和&,那么表示开头和结尾必须以数字开头,所以就是false;
综上所述,我们在写正则表达式时,一定要注意添加^和&

var reg = /\d*/;reg.test("2w");//true

RegExp创建方式

我们也可以使用RegExp创建正则表达式,new RegExp(pattern,flag) ,注意,这里的pattern是纯表达式,不含有/pattern/中的/和/,并且转义的话,需要双重转义这里的双重转义跟java中的正则表达式字符串是一样的,都是双重转义。

var reg=new RegExp("name","i");reg.test("myname");//true

匹配.name,第一次转义后是.name,再进行第二次转义后\.name

var reg=new RegExp("\\.name","i");reg.test("mynsdfsdf.name");//true

常用方法

测试是否匹配test()

test方法上边我们已经使用了,用来测试是否匹配表达式,这个比较常用,一定要记住。

var type=/iamge\//;type.test("iamge/jpg");//true

捕获分组exec()

有时我们需要获取匹配结果,这是就需要使用exec函数,exec返回一个数组。
如,我想知道匹配表达式的字符串是什么,

var reg=/.at/;reg.exec("my,cat");//获取到的匹配字符串是["cat"]

exec()最主要的作用是用来获取匹配分组结果。

var reg=/(you(.at)?)mm/;reg.exec("youhatmmhome");["youhatmm", "youhat", "hat"]

exec()返回的第一个结果是最大匹配项,而后依次递减。我们观察结果,结果依次匹配(you(.at)?)mm、(you(.at)?)、.at,匹配项越来越往里。

再来一例
返回的数组,第一项是匹配的整个字符串,第二项是组匹配的项,因为加了g,全局匹配,所以,可以继续获取匹配结果集,直到null

var reg=/(.at)/g;reg.exec("aat,bat,cat,dat");//["aat", "aat"] reg.exec("aat,bat,cat,dat");//["bat", "bat"]reg.exec("aat,bat,cat,dat");//["cat", "cat"]reg.exec("aat,bat,cat,dat");//["dat", "dat"]reg.exec("aat,bat,cat,dat");//null

因为没有组,所以只返回匹配字符串,没有组匹配字符串;因为有g全局匹配,所以会一直匹配下去,直到返回null

var reg=/.at/g;reg.exec("aat,bat,cat,dat");//["aat"] reg.exec("aat,bat,cat,dat");//["bat"]reg.exec("aat,bat,cat,dat");//["cat"]reg.exec("aat,bat,cat,dat");//["dat"]

关于匹配模式中g(lobal)的理解

很多人可能对g不是很理解,最初我也是不了解。g是global的首字母,翻译过来就是全局匹配,可以这样描述g,获取到匹配的第一个结果后,继续往下获取匹配结果

如下例,字符串中存在两个匹配字符串分别是yname,rname,在获取到第一个匹配串后,因为有g(lobal),全局匹配,所以再执行exec会继续获取匹配结果

var reg=new RegExp(".name","g");reg.exec("mynameyourname");//["yname"]reg.exec("mynameyourname");//["rname"]

如果不加g,你会发现,总是获取第一个匹配结果,不会继续往下匹配。

var reg=new RegExp(".name");reg.exec("mynameyourname");//["yname"]reg.exec("mynameyourname");//["yname"]reg.exec("mynameyourname");//["yname"]

总结

js中的正则要点不多,现在回想一下是否记住了呢?^_^

  • 字面量式正则比较常用,理解g、i的作用;
  • new RegExp(pattern,flag)与字面量方式的区别;
  • 掌握exec()的作用
0 0
原创粉丝点击