有一段html代码 " *<!--a-->*<!--b-->*<!--3-->*<!--c--> " (“*”为不包含“-->”任何字符组合,“-->”为分隔标志,a,b 都是动态的数字)
那么正则表达式怎样写才可以获取“*<!--3-->”我这样写了:
  aa=*<!--a-->*<!--b-->*<!--3-->*<!--c-->
  re = new RegExp("-->(.|\\n)*<!--3-->","g")
  document.write (aa.match(re))可是获取到的是“-->*<!--b-->*<!--3-->”或者有什么方法可以获取“*<!--3-->”??

解决方案 »

  1.   

    很无聊的做法。。var aa="*<!--f-->*<!--h-->*<!--m-->*<!--a-->*<!--b-->*<!--3-->";
     var re = /-->(.|\\n)+<!--3-->/g;
      var index=-1;
      while(aa.search(re)!=-1){
       index=aa.search(re);
       aa=aa.substr(index+3);
      }
      alert(aa);
      

  2.   

    aa="sadfsaf<!--a-->sdfsadf<!--b-->aaaaaaaaaaaa<!--3-->";
    aa.match(/-->((?:(?!-->).)+?)<!--3-->/g)
      

  3.   

    var str ="aaa<!--555-->bbb<!--3-->aaa->bbb<!--323-->3-->xxxxx<!--444-->";
        alert(str.match(/((?:(?!<!--\d+-->).)*?<!--\d+-->)/g));
      

  4.   

    (“*”为不包含“-->”任何字符组合,“-->”为分隔标志,a,b 都是动态的数字)
    楼主的这个解释,反复看了十来遍才看懂如果要提取的子字符串在源字符串中只出现一次
    <script type="text/javascript"> 
        var aa="*<!--a-->*<!--b-->*<!--3-->*<!--c-->";
        var re = /(?:^|-->)((?:(?!-->).)*<!--3-->)/;
        document.getElementById("result").value = aa.match(re)[1];
    </script>如果要提取的子字符串在源字符串中只可能出现多次
    <script type="text/javascript"> 
        var aa="*<!--a-->*<!--b-->*<!--3-->*<!--c-->*<!--d-->*<!--e-->*<!--3-->*<!--f-->";
        var re = /(?:^|-->)((?:(?!-->).)*<!--3-->)/g;
        var result;
        while ((result = re.exec(aa)) != null) 
        {
            document.getElementById("result").value += result[1] + "\n";
        }
    </script>
      

  5.   

    哦,我的测试代码是以这种形式输出结果的,忘了改了<textarea id="result" rows="10" cols="100"></textarea>