正则匹配

RegExp.prototype.exec()方法:用于检索字符串中的正则表达式的匹配。

语法:RegExpObject.exec(string)

找到了匹配的文本,返回一个结果数组,并且更新正则表达式对象的属性。

否则,返回null。

var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = 'Found ' + myArray[0] + '. ';
//查找将从正则表达式的  lastIndex 属性指定的位置开始,每次迭代时 lastIndex 的属性都被重置,不能放在 while 条件表达式里
  msg += 'Next match starts at ' + myRe.lastIndex;
  console.log(msg);
//Found abb. Next match starts at 3
//Found ab. Next match starts at 9
}

String.prototype.match()方法:当字符串匹配到正则表达式(regularexpression)时,会提取匹配项。

语法:str.match(regexp);

返回一个包含匹配结果的数组,如果没有匹配项,则返回null。

如果正则表达式没有g标志,返回和RegExp.exec(str)相同的结果。

如果正则表达式包含g标志,则该方法返回一个包含所有匹配结果的数组。

var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);
console.log(matches_array);
//["A", "B", "C", "D", "E", "a", "b", "c", "d", "e"] 
var exec_array = regexp.exec(str);
console.log(exec_array);
//两个额外属性:index是匹配字符串的起始位置,input是整个输入字符串。
//["A", index: 0, input: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"]
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/;
var matches_array = str.match(regexp);
console.log(matches_array);
//["A", index: 0, input: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"]
var exec_array = regexp.exec(str);
console.log(exec_array);
//["A", index: 0, input: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"]

结论:RegExp.prototype.exec()与String.prototype.match()的不同之处

--------无论RegExpObject是否是全局模式,exec()都会把完整的细节添加到它返回的数组中。

当RegExp的global属性为true时,返回的数组是不同的

match方法返回的数组包含着所有匹配字符串,没有子匹配字符串和额外属性。此时,lastIndex属性无效。

exec方法返回的数组格式与global为false时一样,只是此时RegExp的lastIndex属性有效,匹配是从lastIndex所指示的字符开始的,并且方法执行后会将lastIndex置为本次匹配字符串的下一个字符处,所以循环执行exec方法时会依次匹配整个字符串,直到字符串最后返回null,并将lastIndex置0。

http://www.cnblogs.com/zhaoran/archive/2013/01/10/2854852.html

相关推荐