exec为正则表达式方法,match为字符串方法

a:exec

exex为正则表达式的方法。如果没有找到匹配则返回null,如果找到匹配则返回一个数组并更新全局的RegExp对象的属性【数组0元素包含了完整的匹配项,而从1~N包含的是匹配中出现的任意一个子项的匹配。这相当于没有设置全局标志(g)的match方法】

 1  
 2 
 3          var str = "<a href='//www.baidu.com'>fasdf</a>";
 4 
 5  
 6 
 7          var reg = /(<(\w+)\s* [^>]*>)\w*(<\/\2>)?/;
 8 
 9  
10 
11          var list = reg.exec(str);
12 
13  
14 
15          console.log(list);
View Code

 

 

正则子项匹配情况:

 

返回数据为数组:

第0项:是满足正则的所有匹配(的字符) "<a href='//www.baidu.com'>fasdf</a>"

第1项:第一个子表达式的匹配项的值"<a href='//www.baidu.com'>"

第2项:第二个子表达式的匹配值"a"

第3项:第三个子表达式的匹配值"</a>"

说明:正则中的\2表示对第二个匹配项的引用【同理\1是对第一个正则字表达是的引用】

 

exec只执行一次匹配,即使有全局标识,所以要想获得更多的匹配必须使用while循环

 1          var reg = /(<(\w+)\s*[^>]*>)\w*(<\/\2>)?/g;
 2 
 3          while ((list = reg.exec(str)) !== null){
 4 
 5            var msg = "Found " + list[0] + ".  ";
 6 
 7            msg += "Next match starts at " + list.index;
 8 
 9            console.log(list);
10 
11          }
View Code

执行结果:

 

注:虽说是while循环,可正则仍需要为全局的,否则会就如死循环,一直循环第一项。

 

b:关于match

match是字符串的方法,str.match(reg);

理论:1>如果 match 方法没有找到匹配,返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果

2>如果没有设置全局标志 (g),数组的 0 元素包含整个匹配,而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志,元素 0 到 n 中包含所有匹配。

 

没有加全局标识的时候:

1          var str = "<a href='//www.baidu.com'>fasdf</a><b ></b>";
2 
3  
4 
5          var reg = /(<(\w+)\s* [^>]*>)\w*(<\/\2>)?/;
6 
7         
8 
9          console.log(str.match(reg));
View Code

执行结果:

 

注:当没有全局标识的时候,只执行一次。

 

1          var str = "<a href='//www.baidu.com'>fasdf</a><b ></b>";
2 
3  
4 
5          var reg = /(<(\w+)\s* [^>]*>)\w*(<\/\2>)?/g;
6 
7         
8 
9          console.log(str.match(reg));
View Code

执行结果:

 

如果有全局变量的话,则单单返回完全匹配的数据

   总结:当RegExp没有全局标识的时候,exec和match是等价的,而有有全局标识的时候,exec需要使用while循环来获取匹配的数组,并且每个数据的项都包含了具体匹配的值中子项匹配情况,每次匹配的位置等情况

而match仅仅返回匹配的数组。

如果想要获取更多的匹配信息,还需要使用exec【while】

 

1          var str = "<a href='//www.baidu.com'>fasdf</a><b ></b>";
2 
3  
4 
5          var reg = /(<(\w+)\s* [^>]*>)\w*(<\/\2>)?/g;
6 
7  
8 
9          console.log(str.replace(reg, "<p>$&</p>"));
View Code

执行结果:

 

posted on 2013-09-23 22:27  murongzi  阅读(409)  评论(0编辑  收藏  举报