<script>
function getoption(url){
var str="";
var reg=/<a href=".+?">(.+?)<\/a>/g;
str=url.match(reg);
for(i=0;i<str.length;i++){
alert(RegExp.$1); 
}
}
str='<a href="http://www.aspbc.com" target="_blank">网站1</a><a href="http://www.baidu.com" target="_blank">网站2</a><a href="http://www.sina.com.cn" target="_blank" title="新浪">网站3</a>';
getoption(str); //为什么我这里弹出了3次”网站3“
</script>我想分别弹出“网站1”,"网站2",“网站3”,而这里这里为什么弹出了3次”网站3“?如何修改实现我想要的结果?正则

解决方案 »

  1.   

    试试function getoption(url){
    var str="";
    var reg=/<a href=".+?">(.+?)<\/a>/g;
    while(r = reg.exec(url)) {   
    alert(r[1]); 
    }
    }
    str='<a href="http://www.aspbc.com" target="_blank">网站1</a><a href="http://www.baidu.com" target="_blank">网站2</a><a href="http://www.sina.com.cn" target="_blank" title="新浪">网站3</a>';
    getoption(str); //为什么我这里弹出了3次”网站3“
      

  2.   

    正则没什么问题,问题在使用上,你alert时已经匹配结束了,RegExp.$1本来就是一个定值
    function getoption(url){
    var str="";
    var reg=/<a href=".+?">(.+?)<\/a>/g;
    str=url.match(reg);
    for(i=0;i<str.length;i++){
    alert(str[i]); 
    }
    }
      

  3.   

    function getoption(url) {
    var str = "";
    var reg = /<a href=".+?">(.+?)<\/a>/g;
    while (str = reg.exec(url)) {
    alert(str[1]);
    }
    }
    str = '<a href="http://www.aspbc.com" target="_blank">网站1</a><a href="http://www.baidu.com" target="_blank">网站2</a><a href="http://www.sina.com.cn" target="_blank" title="新浪">网站3</a>';
    getoption(str);应该这样吧
    当使用match时,
    一、加/g,会匹配所有的可能,并将匹配的第一个,成为数组元素,也就是2楼,wzs_xyz的方法,会显示三个<a>,这不是楼主要的。二、 不加/g,只作一次匹配,返回str[0] 是一个a,str[1] 是第一个子匹配,即“网站1”这两个,显然,都不能满足楼主,所以应使用exec这个方法。wzs_xyz
      

  4.   

    也就是说,你加了/g,时,用match方法,你用()指定子匹配,就没有意义了,反正它也返回不了,里面的括弧里的子匹配了。