String.prototype.match(str|regexp)内部其实使用了RegExp.prototype.exec方法。
首先根据传入的参数分别创建一个RegExp对象和String对象,然后调用RegExp.exec(String);
使用match时有时需要注意group ()和 flag /g的结合使用时的处理:
例1:
var r, re; // 声明变量。 var s2 = "The rain in Spain falls mainly in the plain"; re = /(a)((i)(n))/i; // 创建正则表达式模式。 r = s2.match(re); // 尝试去匹配搜索字符串。 alert(r);
返回的结果是:“ain,a,in,i,n”;
返回的是 rain中的ain,(a)((i)(n))是第一个分组,由于内部分组存在,第二个分组是a 第三个是in,第四个是i,第五个是n,match以数组的形式返回这个分组,而不会继续去匹配字符串
如果是下面的用法,例2:
var r, re; // 声明变量。 var s2 = "The rain in Spain falls mainly in the plain"; re = /ain/ig; // 创建正则表达式模式。 r = s2.match(re); // 尝试去匹配搜索字符串。 alert(r);
返回的结果是:“ain,ain,ain,ain”
再如果是,例3:
var r, re; // 声明变量。 var s2 = "The rain in Spain falls mainly in the plain"; re = /(a)((i)(n))/ig; // 创建正则表达式模式。 r = s2.match(re); // 尝试去匹配搜索字符串。 alert(r);
返回的结果是:“ain,ain,ain,ain”
总结:
1.如果使用了标识 \g时,将忽略group 分组,再全局里面进行匹配。如例 2、3
2.没有使用 标识 \g时,如果存在匹配,将对匹配的第一个返回进行分组,并再结果中返回分组结果,如例1.