<3333>\s<3333>\s(.*?)<4444>\s<4444>试试。

解决方案 »

  1.   

    但也有 这类情况啊
    [1]
    <3333>
    ccc
    <3333>
    aaa
    <4444><4444>[2]
    <3333>
    aaa
    <4444>
      

  2.   

    <3333>\s<3333>\s(.*?)<4444>\s<4444>
    根本就不匹配
      

  3.   

    function test()
    {
    var s = aa.value ;
    var the = /<3333>\s([^<]*?)<4444>/g
    if( the.test(s) )
    {
    alert( RegExp.$1 )
    }
    }
      

  4.   

    地一个没显示出来结果应该显示
    <3333>
    aaa
    <4444>和aaa
      

  5.   

    example:
    <3333><3333>
    aaa
    <4444><4444>
    ------------------------
    result1:
    <3333>
    aaaresult2:
    <3333>
    aaa
    <4444>result3:
    aaaresult4:
    aaa
    <4444>
    ---------------------
    我想知道,你要这四个结果吗,还是就你说的那两个,把规则说清楚我的理解是
    1.组合式,前两个<3333>和后两个<4444>组合,只要找到配对的,就把它们之间的内容提取
    2.搂主的自定义式,第一个<3333>和最后一个<4444>组合,第二个<3333>和倒数第二个<4444>组合还有点不清楚的是,下面这样的例子lz认为该是什么结果呢?
    <3333><3333>
    aaa
    <4444>
    <4444>
    <4444>
      

  6.   

    var s="<3333><3333>aaa<4444><4444><3333><3333>dd<4444><4444>"
    var r=/<3333>([^<>]+)<4444>/ig;
    while ((a = r.exec(s)) != null)
    document.write(a);
      

  7.   

    这个是需要转换的代码
    <3333>
    ccc
    <3333>
    aaa
    <4444><4444>
    转换后可以得到两个结果第一个是
    ccc
    <3333>
    aaa
    <4444>第二个是
    aaa
      

  8.   

    如果想用一个正则满足lz要求的结果是不可能的[1]
    <3333>
    aaa
    <4444>[2]
    aaa因为aaa已经作为成功的匹配内容,下次作匹配时它就不再作为匹配对象了
    如果用多个正则还可以实现,但好像没有什么意义
    (?<=(<3333>))(.+)(?=(<4444>))
    <3333>
    aaa
    <4444>(?<=(<3333>))([^<>]+)(?=(<4444>))
    aaa
      

  9.   

    正则:<3333>\s*(\S*)\s*<4444>
    函数:test
    用RegExp.$1取值,可以得到结果是:aaa
      

  10.   

    <html>
    <body>
    <script>
    function matchIt(txt){
    var r1=/<3333>\s*(.+)\s*<4444>/ig;
    var arr = r1.exec(txt);
    for (var i = 0; i < arr.length; i++) {
    alert(arr[i]);
    }
    }
    </script>
    <form method="post" action="">
    请在此处输入中文:<input name="hz">
    <input type="submit" value="Submit">
    <br />
    <textarea cols="85" rows="10" name="txt">
    &lt;3333&gt;
    ccc
    &lt;3333&gt;
    aaa
    &lt;4444&gt;&lt;4444&gt;
    </textarea>
    <button onclick="matchIt(this.form.txt.value)"> Match </button>
    </form>
    </body>
    </html>不好意思,我错了,调试工具竟然也会骗人
      

  11.   

    zhaoxiaoyang(梅雪香@深圳) 的答案
      

  12.   

    楼主的功能用一个正则实现是不可能的,正则是基于匹配的,你的代码存在重复匹配,就算预查不占字符也是没有办法完成的。
    楼主的功能更象DOM规则,建议你用DOM实现。
      

  13.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function f()
    {alert(document.all.mainInfo.childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[3].childNodes[1].innerText);
    document.all.mainInfo.childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[3].childNodes[1].innerText=126532452;}
    //-->
    </SCRIPT>
    </HEAD><BODY>
    <h4>aaa</h4>
    <div id="mainInfo" class="partCont">
    <table>
    <tr>
    <td class="c">
    <div id="userPic">
    <a href="/album/Album.jsp?u=200015585"><img src='http://cover.5q.com/album/01/55/85/200015585/mid_200015585.jpg' alt="查看更多照片" /></a><br>
    </div>
    </td>
    <td>
    <h4>欧文</h4>
    <div id="sendRequest">


    <img src="http://img.5q.com/images/ico_offline.gif" align="absmiddle" alt="离线">

    </div>
    <div id="signature">

    </div>
    <div class="resource">
    资料被浏览<span>101</span>次<br/>
    最后登录:<span>2006.07.28</span>
    </div>
    <br/>
    </td>
    </tr> </table></div>
    <input type=button onclick="f()" value="change"><br>
    </BODY>
    </HTML>
      

  14.   

    上面的例子是获取资料被浏览<span>101</span>次中的101,并将它修改为126532452
    执行一下我上面的HTML,不知道对你是否有帮助,如楼上上所说,用DOM。
      

  15.   

    按照你的需求写的
    <textarea id="textarea1">
    <3333>
    ccc
    <3333>
    aaa
    <4444><4444>
    </textarea>
    <script language=javascript>
     
      var str=document.getElementById("textarea1").value
      re=/<3333>/g
      var resultArray=new Array();
      while(re.test(str))
      {
       re2=/<3333>([\s\S]*)<4444>/
       str=str.replace(/<3333>([\s\S]*)<4444>/,function(a,b){resultArray.push(b);return '<test>'+b+'</test>'}) 
      }
      for(var i=0;i<resultArray.length;i++)
      {
       alert(resultArray[i])
      }
    </script>
      

  16.   

    superdullwolf.cnzone.net
    我做了一个正则练习器
      

  17.   

    <3333>(.+?)<4444>非贪婪获取三和四之间的东西
      

  18.   

    中间的内容如果没有 "<"正则表达式 (<3333>)([^\<]*)(<4444>)
    javascript的话 /(<3333>)([^\<]*)(<4444>)/gi$2就是 <3333> <4444>之间的内容
      

  19.   

    \<3333\>(?![^\<]*?\<3333\>).*?\<4444\>
      

  20.   

    var s="<3333><3333>aaa<4444><4444><3333><3333>bbb<4444><4444><3333><3333>ccc<4444><4444>";
    var s = s.replace(/<3333>/g,"\x00")
    var s = s.replace(/<4444>/g,"\x01")
    var r = /\x00[^\x00\x01]*\x01/g
    var results = s.match(r);
    for(var i=0;i<results.length;i++)
    results[i]=results[i].replace(/\x00/g,"<3333>").replace(/\x01/g,"<4444>");
    alert(results)
      

  21.   

    看了一下,楼主的要求好像是这样的:
    var s = "<3333>1<3333>2<3333>3<3333>aaa<4444>4<4444>5<4444>6<4444>7<3333>8<3333>9<3333>0<3333>bbb<4444>1<4444>2<4444>3<4444>";
    var s = s.replace(/<3333>/g,"\x00");
    var s = s.replace(/<4444>/g,"\x01");
    var result = [];
    var r0="\\x00";
    var r1="[^\\x00\\x01]*";
    var r2="\\x01";
    var r = new RegExp(r0+r1+r2,"g")var rs = s.match(r);
    for(var n=2;!!rs;n++){
    for(var i=0;i<rs.length;i++) result[result.length]=rs[i].replace(/\x00(.*)\x01/,"$1");
    var a = new Array(n);
    r = new RegExp(r0+a.join(r1+r0)+r1+r2+a.join(r1+r2),"g")
    var rs = s.match(r);
    }
    for(var i=0;i<result.length;i++)
    result[i]=result[i].replace(/\x00/g,"<3333>").replace(/\x01/g,"<4444>");
    alert(result.join("\n"))
      

  22.   

    哀,今天上来看了看一些高手们写的 正则,我全测试了一下,错误真多,我都不知道如何说起了郁闷啊,按理说正则是应该实现的,还有的朋友说用DOM,,DOM是不可能的,因为我的不是htm基本上所有的代码都不能正确分析
    <3333>
    ccc
    <3333>
    aaa1
    <4444>
    <3333>
    aaa2
    <4444>
    <3333>
    <3333>
    aaa34
    <4444>
    aaa3
    <4444>
    <4444>
      

  23.   

    (?<name1-name2> )
    平衡组定义。删除先前定义的 name2 组的定义并在 name1 组中存储先前定义的 name2 组和当前组之间的间隔。如果未定义 name2 组,则匹配将回溯。由于删除 name2 的最后一个定义会显示 name2 的先前定义,因此该构造允许将 name2 组的捕获堆栈用作计数器以跟踪嵌套构造(如括号)。在此构造中,name1 是可选的。可以使用单引号替代尖括号,例如 (?'name1-name2')。试试这个
      

  24.   

    Regex reg=new Regex(@"((?<o>\<3333\>)[^<>]+(?<-o>\<4444\>))*(?(o)(?!))");
      

  25.   

    改改
    Regex reg=new Regex(@"((?<o>\<3333\>)+[^<>]+(?<-o>\<4444\>)+)*(?(o)(?!))");
      

  26.   

    再改改
    Regex reg=new Regex(@"((?<o>\<3333\>[^<>]*)+[^<>]+(?<-o>\<4444\>[^<>]*)+)*(?(o)(?!))");