js match 与 exec(exec的数组的用法)...
时间:2010-08-14 来源:bluesky5219
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的时候等价
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的时候等价
相关阅读 更多 +