日期:2014-05-16  浏览次数:20405 次

js中正则表达式的问题

<script>
var str = "123456";
var reg = /([0-9]2[0-9]4[0-9]{0,})/; // 为什么加()会出现两次
var result = reg.exec(str);
alert(result);
</script>


为什么这个程序加上小括号会出现两次,但去掉小括号就出现一次?




var str = "acccccbcccccccccc";
var reg = /c{2,}/g;
var result = reg.exec(str);//只获取第一个匹配到的字符组合
alert(result);


这程序只匹配到第一个组合,即ccccc;如何使它匹配全局,即ccccc,cccccccccc
正则表达式 JavaScript

------解决方案--------------------
1.因为你这里也没有添加g属性(全局匹配),小括号就相当于一个子正则,所以本身一次,子正则一次

2.exec是全局匹配,匹配一次以后,下次匹配会从上一次匹配过后开始向后匹配。要想获取到2个,用string的match方法。

具体的可以去这里(exec方法)看吧。。
------解决方案--------------------
1、你加了括号,返回的数组就有两个元素了。此数组的第 0 个元素是与正则表达式相匹配的文本,第 1 个元素是与正则表达式的第 1 个子表达式相匹配的文本

2、用while循环反复调用就对了
var str = "acccccbcccccccccc";
var reg = /c{2,}/g;
var result ;
while(result = reg.exec(str)){//只获取第一个匹配到的字符组合
   alert(result);
}