标签:
正则表达式是一个描述字符模式的对象,它的主要作用是对字符串进行模式匹配、文本检索,匹配成功则根据正则描述的内容得到匹配字符串(可能会是空)同时代
表检索成功,基于这个结果字符串可以进行再一步的文本替换等功能,匹配不成功就什么结果也没有。正则表达式的模式匹配总是会寻找字符串中第一个可能匹配的
位置即它总是从左至右进行匹配。
一、正则表达式的实质及创建
1、正则表达式即RegExp是JS中的一种引用类型,可以通过实例化得到一个可操作的对象。
2、创建方式:
正则字面量形式 var pattern = /bfy/gi,ES3规定每次运行相同字面量初始化都返回同一个实例对象,这是不合理的,ES5改正了这个地方,返回新的实例更符合开发人员期望,也可
以减少“残留”的lastIndex值对程序造成的意外影响;
构造函数形式 var pattern = new RegExp(“bfy”,”gi”),构造函数形式中的字符串参数需要进行双重转义(对元字符和转义字符)。
3、RegExp类型有以下几个静态属性
input、lastMatch、lastParen、leftContext、multiline、rightContext。这几个属性有相应的短属性名,其中三个可以以字符串形式作为replace()方法的第二个参数;此外还有$1-$9存储捕获组。
RegExp的静态属性动态依赖于最近发生的一次模式匹配。
二、正则表达式的组成
正则表达式可以看做是由一系列的字符组合而成。
1、/ /内的字符进行模式匹配,主要有直接量字符、转义字符、元字符(锚字符和特殊语法字符)和字符类。
直接量字符最常见,进行一对一地匹配,如bfy;
转义字符支持非字母的字符匹配,如\n匹配换行符,还有特殊转义字符如\w表示数字和字母的集合;
元字符主要功能是描述相关语法,比如锚字符指定匹配位置(^匹配开始,$匹配结束),特殊语法字符(|表示选择模式);
字符类代表一类字符可用于匹配,分为普通字符类[…]和否定字符类[^…]。
2、/ /外的字符叫做修饰符,对正则的模式匹配进行控制,有i、m、g。
三、正则表达式的特殊语法
正则不仅可以进行简单的字符对字符的匹配,还有几种特殊的语法可以使用。
1、重复———对重复的字符进行匹配
重复字符:{}、?、+、*。重复语法默认是贪婪模式即正则会努力匹配更多的字符,如果不想要这样的模式,可以启动非贪婪模式即在重复字符后面跟一个?。
2、选择———在一个正则中指定多个待匹配项
选择字符:|,从左至右进行匹配,匹配到了就结束。
3、分组及其引用——对子表达式进行分组
分组字符:()——默认会被捕获到的分组,(?:)——不会被捕获到的分组
分组的作用:(1)产生子表达式后可以把它作为一个整体进行处理,比如加上重复,进行选择等等;(2)抽取子模式,也就是可以捕获到子表达式匹配到的那部分的字符串,用\数字进行引用。
四、正则对象的属性
1、source——正则表达式的字面量形式的字符串表示;
2、global——是否开启全局;
3、ignoreCase——是否开启屏蔽大小写;
4、multiline——是否开启多行匹配模式;
5、lastIndex——下一次匹配行为开始检索的位置,在对某次字符串没有匹配完就进行下一次匹配之前要充值它为0,否则会遗留上一次的索引。
五、在脚本中使用正则表达式进行模式匹配
JS中提供了两种方式使用正则表达式进行模式匹配。
1、字符串调用相关方法进行模式匹配
(1)search()——严格的模式匹配方法,参数会强制转换成正则对象。不支持全局g,返回匹配字符串的起始位置或者-1;
(2)replace()——不严格的模式匹配方法,第一个参数可以是字符串也可以是正则,第二个参数可以是字符串也可以是个函数(结合swich结构可以实现很灵活的操作),没有可操作的返回值;
(3)match()——严格的模式匹配方法,参数会强制转换成正则对象。全局模式下返回包含全部匹配字符串的数组,非全局模式下返回关于第一次匹配行为的信息的数组,失败则返回null;
(4)split()——不严格的模式匹配方法,第一个参数是个作为分割依据的字符串或者正则,第二个参数可选,指定进入结果数组的元素个数,返回结果数组。
2、正则对象调用相关方法进行模式匹配
(1)exec()——与match()相似,只是不论是否是全局模式都只返回关于本次匹配行为的信息的数组;
(2)test()——只关注是否匹配,不在乎匹配结果字符串,返回布尔值。
原文地址:www.bfy0412.com
标签:
原文地址:http://www.cnblogs.com/bfywyx/p/4714717.html