JavaScript 正则表达式进阶
在JS中,正则表达式事实上是一个对象,称之为RegExp类型,风格很类似于Perl。
常见的定义办法,也称为字面量形式,就是:
var reg=/pattern/flags
其中flags可以是多种选项的组合,这些选项包括:
i-- 不区分大小写(case--insentive),即在确定匹配项的时候不区分大小写
g-- 表示全局模式(global),即模式被应用于所有的字符串
m-- 表示多行模式(multiline) ,即在达到一行文本末尾时还会继续查找下一行中是否存在与模式匹配的项
另外一种方式就是利用RegExp构造函数。它接受两个参数,第一个参数表示模式,而第二个参数表示可选项(就是i,g,m),例如:
var reg=/.at/i //以不区分大小写的形式匹配以at结尾的长度为3的字符串 //等效于 var reg=new RegExp("\.at","i");
正则表达式对象RegExp主要有以下两个方法:
第一个方法:exec 这个方法专门用来捕获匹配组的,它接受一个String类型的参数,返回匹配项的数组,如果没有匹配项则返回null。返回的数组虽然是Array的实例,但它具有额外的两个属性:index和input,其中index表示匹配项在字符串中的位置,而input表示应用正则表达式的字符串。例如:
var text="mom and dad and baby"; var pattern=/mom( and dad( and baby)?)?/; var matches=pattern.exec(text); alert(matches.index);//输出0 alert(matches.input);//输出mom and dad and baby alert(matches[0]);//输出mom and dad and baby alert(matches[1]);//输出and dad and baby alert(matches[2]);//输出and baby
这个匹配组的方式在Python中,也有用到。例如:
import re; m=re.match("mom( and dad( and baby)?)?", "mom and dad and baby"); print m.groups();#输出and dad and baby和and baby print m.group();#输出mom and dad and baby
简单的介绍下,group()返回所有匹配对象,groups()则简单,它返回一个包含唯一或所有子组的元组。
第二个方法:test(),它接受一个字符串参数。在模式与该参数匹配的情况下返回True,否则返回False。这个方法只关注模式是否与字符串匹配,至于为什么不匹配,就无关紧要了。例如:
var pattern=/\d{3}-\d{2}-\d{3}/; var str="000-00-000"; if(pattern.test(str)){ alert("The pattern was not matched"); }