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,这是因为\d与2匹配,所以是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()的作用
- JavaScript 正则 正则表达式
- Javascript 正则表达式javascript
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- javascript正则表达式,jquery正则
- JavaScript正则表达式
- JavaScript正则表达式
- javascript中的正则表达式
- JavaScript正则表达式
- javascript正则表达式
- [JavaScript]正则表达式学习
- JavaScript中的正则表达式
- JavaScript正则表达式- -
- javascript正则表达式
- JavaScript正则表达式
- Javascript正则表达式
- javascript 正则表达式总结
- 解决canvas getimagedata 跨域问题[已解决]
- struts2详细配置及应用
- 绝对众数
- BSTR类型
- vim学习
- javascript 正则表达式
- SQLCookBook第一章学习日记2
- python的range()函数用法
- 微信公众平台开发(102) 模板消息
- Maven学习总结(八)——使用Maven构建多模块项目
- Java-面向对象(基础编)--包装类
- css3属性border-radius详解
- 从零开始学C++之虚函数与多态(二):纯虚函数、抽象类、虚析构函数
- python 的日志logging模块学习