在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
var s2 = "140402001>SPF=3=0,140402002>RQSPF=3=-1,140402003>SPF=1=0,140402004>RQSPF=3=1_3_0.08"; var res = s2.match(/\d{9}/g); //存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
即[140402001,140402002,140402003,140402004]
var re = new RegExp("(\\d{9}).*(\\d{9}).*"); var matches = re.exec(s); if (matches != null) { for (var i=1; i<matches.length; i++) { allItem.push(matches[i]); } }
则只能得到固定的匹配,如果想得到4个分组,必须写4个(\\d{9}) 。
所以有时用String对象的match方法来获取分组更合适。
第二个方法: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");
}