`

正则匹配

阅读更多
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()方法: 当字符串匹配到正则表达式(regular expression)时,会提取匹配项。

         语法: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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics