正则表达式match和exec

match和exec进行匹配.返回的都是匹配数组但却有着区别.让我们分析下.
1.match
match方法属于String正则表达方法.
语法: str.match(regexp)
str:要进行匹配的字符串. regexp:一个正则表达式(或者由RegExp()构造成的正则表达式)
match的用法主要区分就是,正则表达式是否有全局标示g.
1)如果有g全局标志,那么返回的数组保存的是,所有匹配的内容.
2)如果没有g全局标志,那么返回的数组arr.arr[0]保存的是完整的匹配.arr[1]保存的是第一个括号里捕获的字串,依此类推arr[n]保存的是第n个括号捕获的内容.
< script  type ="text/javascript" >
<!--
str 
=   " abbb34eftab0modabbbbb6 " ;
var  reg  =   / a(b)+(\d+) / i; //  then test: var reg = /a(b)+(\d+)/ig
var  arr  =  str.match(reg);
for ( var  i  =   0 ; i  <  arr.length; i ++ ){
    document.write(arr[i] 
+   " ----> " );  // 根据返回结果可知如果有g全局,那么返回所有匹配[abbb34,ab0,abbbbb6]
                                       // 如果没有g全局,那么返回数组arr[0]为匹配的完整字串后面是括号里的捕获[abbb34,b,34];
}
// -->
</ script >
2.exec
与match方法不同exec属于正则表达式的方法.
语法:var result1 = regexp.exec( str);
regexp:正则表达式 str:要匹配的字串
exec与match的关联就是exec(g有没有都无影响)就等价于不含有g全局标志的match.即返回数组arr[0]为匹配的完整串.其余的为括号里捕获的字符串.
仍以上面的为例:
< script  type ="text/javascript" >
<!--
str 
=   " abbb34eftab0modabbbbb6 " ;
var  reg  =   / a(b)+(\d+) / ig; //  then test: var reg = /a(b)+(\d+)/i
var  arr  =  reg.exec(str);
for ( var  i  =   0 ; i  <  arr.length; i ++ ){
    document.write(arr[i] 
+   " ----> " );  // 根据返回结果可知无论是否有g全局.返回的数组arr[0]为匹配的完整字串后面是括号里的捕获[abbb34,b,34]即与不含有g的match等价
}
// -->
</ script >
但如果有g对exec本身的影响是,当一个具有g的正则表达式调用exec()时,他将该对象的lastIndex设置到紧接这匹配子串的字符位置.当第二次调用exec时将从
lastIndex所指示的字符位置开始检索.利用这个特点可以反复调用exec遍历所有匹配.等价于match具有g标志.
< script  type ="text/javascript" >
<!--
str 
=   " abbb34eftab0modabbbbb6 " ;
var  reg  =   / a(b)+(\d+) / g; //  then test: var reg = /a(b)+(\d+)/i
while ((arr  =  reg.exec(str))  !=   null ){
    document.write(arr[
0 +   " ----> " ); 
}
document.write(
" <br/> " )
var  arrmatch  =  str.match(reg);
for ( var  i  =   0 ; i  <  arrmatch.length; i ++ ){
    document.write(arrmatch[i] 
+   " ----> " ); 
}

// -->
</ script >
可见上面的exec和match是等价的.
[总结]
主要区分match具有g和没有g的区别.然后没有g的时候与exec是等价的.
而exec返回的串类型不受g影响但具有g时候会驱动lastIndex可以模拟遍历所有匹配.可以与match具有g的时候等价

If the regular expression does not include the g flag, returns the same result as regexp.exec(string).

If the regular expression includes the g flag, the method returns an Array containing all matches.


转载于:https://www.cnblogs.com/bluedream2009/archive/2009/08/08/1541585.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值