1、正则表达式的分组
var s="ab=1,bc=54,cd=43"
/*因为这里有g,所以输出[ab=12,bc=54,cd=43]*/
var reg=/(\w+)=(\d*)/g;
/*这里没有g,所以数组里面会保存分组的信息,同时只会返回第一个匹配的结果[ab=12,ab,cd]*/
var reg1=/(\w+)=(\d*)/;
var s3="<h1>hello h1 <h1><html> this is html<html>";
var reg3=/(<\/?\w+>).*\1/g;
var result3=s3.match(reg3);
/*用\n代表第n个括号里面的子表达式,n表示从左数第几个空格,返回结果[<h1>hello h1 <h1>,<html> this is html<html>]*/
2,正则表达式的反向引用
/*正则表达式反向引用,通过RegExp.$1,RegExp.$2来引用相应的分组的信息,可用在test,match,search方法*/
var s="abcd";
var reg=/(\w)(\w)(\w)/;
reg.test(s);
alert(RegExp.$1);
/*在定义的分组中使用反向引用*/
var s1="abab";
var reg1=/(\w)(\w)\1\2/;
alert(reg1.test(s1));//返回true
/*在replace方法中使用反向引用,11aa22bb3c4d4e6f,主要理解正则表达式的原理和回溯机制*/
var s2="aa11bb22c3d4e5f6";
var reg2=/(\w+?)(\d+)/g;
var result2=s2.replace(reg2,"$2$1");
alert(result2);
3.多行正则表达式匹配
/*其中\n表示换行*/var s="a\nb\nc";
var r=/\w+$/g;
var r1=/\w+$/gm;
//var result=s.match(r);//输出的结果只有[c]因为不支持多行匹配
var result1=s.match(r1);//通过设置为gm,可以匹配多行[a,b,c],但是通过RegExp.multiline=true在Opera,Chrome,IE,FF中都没通过,都是返回[c]
4.match方法和exec方法的区别(两者都返回数组)
exec方法是以字符串为参数的RegExp对象方法,match是以正则表达式为参数的String对象方法,在非全局模式下,他们的返回值是相同的!在全局模式下,exec方法会会定义一个lastIndex属性,表示下一次要开始的搜索的位置,当返回值为null的时候,表示字符串检验完毕,因此该方法可以获取完整的匹配信息。
var s="javascript";var reg=/\w/g;
while((a=reg.exec(s))!=null)
{
alert(a[0]+"\n"+a.index+"\n"+reg.lastIndex);//要注意a[0]表示exec每次返回的结果,是一个string类型,但是a是一个数组,也就是说exec的返回值是一个数组,a.index表示返回值的下标,reg.lastIndex是下一次要搜索的位置
};