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个括号捕获的内容.
1.match
match方法属于String正则表达方法.
语法: str.match(regexp)
str:要进行匹配的字符串. regexp:一个正则表达式(或者由RegExp()构造成的正则表达式)
match的用法主要区分就是,正则表达式是否有全局标示g.
1)如果有g全局标志,那么返回的数组保存的是,所有匹配的内容.
<
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<!--
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 >
与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时将从
<!--
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 >
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是等价的.
<!--
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 >
[总结]
主要区分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.