神奇的exec()方法
今天发现《JavaScript高级程序设计》中对正则表达式的exec()方法的讲解完全就是错误的,书中说exec()方法以一个字符串作为参数并且返回一个数组包含所有的匹配项,并且说执行下面这段代码之后,arrMatches就是’at’,'at’,'At’,'aT’,'aT’,'at’这几个字符串组成的一个数组:
var sToMatch = “a bat, a Cat, a fAt baT, a faT cat”; var reAt = /at/gi; var arrMatches = reAt.exec(sToMatch);
可事实上测试这段代码之后结果并非如此,arrMatches只返回的数组中只包含了一项’at’,也就是第一个匹配项。
mozilla上的一篇文章对exec()方法做了比较详细的说明,exec()方法并不像书中所说的跟字符串的match()方法相似,match()方法一次性返回包含了所有匹配项的一个数组,而exec()方法执行一次只返回包含一个匹配项和这次匹配中的所有反向引用的数组,看看下面的例子就比较容易明白:
var myRe = /d(b+)(d)/ig;
var myArray = myRe.exec("cdbBdbsbzDBBBBD");
执行这段代码之后,myArray就变成了这样一个数组:["dbBd", "bB", "d"],很显然数组中的第一项是第一个匹配项,而另外两项则是这次匹配中的反向引用。如果再次执行这句:myArray = myRe.exec("cdbBdbsbzDBBBBD");,那么myArray就变成了这个数组:["DBBBBD","BBBB","D"],也就是第二个匹配项和其中的反向引用组成的数组。每执行一次exec()方法就会从上一次匹配项的末尾开始寻找下一个匹配项,直到找完所有的匹配,如果还继续执行exec()就会返回null。
神奇的彪哥!
JJYY
5 Nov 08 at 12:54 pm