1. 这两个方法,如果匹配成功,返回一个数组,匹配失败,返回null。
2. 当RegExp的global属性为false时,这两个方法的返回数组是一样的。
最重要的就是第二句话,就是在设置//g。设置全局搜寻g和不设置g,是String.match()与RegExp.exec()最大的区别。
举个例子,拿《JS高级程序》这本书的一个例子,我们延展开来讲(书中没有把这个区别讲出来)。
字符串为:var text="cat,bat,sat,fat" ; 正则表达式为:var pattern1=/.at/(这里没有设置全局属性)
1、不使用全局属性g
var matches=pattern1.exec(text);输出matches结果:["cat"]
var matches2=text.match(pattern1); 输出matches2结果:["cat"]
当不全局搜寻的时候,匹配的数组中只有第一个匹配项
2、使用全局属性g
正则表达式改为:var pattern1=/.at/g
var matches=pattern1.exec(text);输出matches结果:["cat", "bat", "sat", "fat"]
var matches2=text.match(pattern1);输出matches2结果:["cat"]
当不全局搜寻的时候,匹配的数组中只有第一个匹配项
结论:在有全局对象时,匹配的数组用String.match(),能得到所有匹配项,而RegExp.exec()只能匹配第一项。
其实额外需要注意的是RegExp的lastIndex属性在有g标识符,且在exec和test方法中是有效的,其他地方是无效的。