这种用正则还不如拆分字符串来的简单
str = '1234567890?aa=1&cc=2&dd=3&ee=4';
arr = str.match(/[a-z]+(?==[^&]+)/g);
然后对该数组进行分析

解决方案 »

  1.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>shawl.qiu template</title>
    <style type="text/css">
    /* <![CDATA[ *//* ]]> */
    </style>
    <script type="text/javascript">
    //<![CDATA[
    if (navigator.appName=="Microsoft Internet Explorer") {
    //最大化窗口
    self.moveTo(-5,-5)
    self.resizeTo(screen.availWidth +8,screen.availHeight+8)
    //这个脚本定义的宽度其实比原窗口还要大那么一点.
    }
    //]]>
    </script>
    <script type="text/javascript">
    //<![CDATA[
     var ar=[];
      ar[0]='1234567890?aa=1&bb=0&cc=2';
      ar[1]='1234567890?bb=0&aa=1&cc=2';
      ar[2]='1234567890?cc=2&aa=1&bb=0';
      ar[3]='1234567890?aa=1&bb=0';
      ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4';
      ar[5]='1234567890?dd=3';
      ar[6]='1234567890?ee=4';
      ar[7]='1234567890?dd=3&ee=4';
      ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2';
      ar[9]='1234567890?dd=3&ff=5&ee=4';
      ar[10]='1234567890?dd=3&ee=4';
      ar[11]='12347890?aa=1&bb=0&ff=5&cc=2';
      ar[12]='12567890?dd=3&ff=5&ee=4';
      
      for(var i=0, j=ar.length; i<j; i++){
       document.write(ar[i],' ',fT(ar[i]),'<br/>');
      }
      
      function fT(str){
       if(!str)return false;
       if(!/1234567890/.test(str))return false;
       if(/ff\=5/.test(str))return false;
       if(!(/\?\S+?\=\S+?\&\S+?\=\S+?\&\S+?\=\S+/.test(str)||/(dd\=.|ee\=.)/.test(str)))return false;
       return true;
      }
    //]]>
    </script>
    </head>
    <body>
    <xmp>有个字符串匹配,范围比较复杂,是这样的:必须包含“1234567890?”,而后可能有多种关系字符串----------------------------------------------
    比如说,匹配与关系:1234567890?aa=1&bb=0&cc=2 -true
    1234567890?bb=0&aa=1&cc=2 -true
    1234567890?cc=2&aa=1&bb=0 -true
    1234567890?aa=1&bb=0 -false 少一个就算错的--------------------------------------------------------
    还有匹配或关系:
    有dd=3或者ee=4都算对
    1234567890?aa=1&cc=2&dd=3&ee=4 -true
    1234567890?dd=3 -true
    1234567890?ee=4 -true
    1234567890?dd=3&ee=4 -true---------------------------------------------------------
    还有匹配非关系:
    有ff=5都算错
    1234567890?aa=1&bb=0&ff=5&cc=2 -false
    1234567890?dd=3&ff=5&ee=4 -false------------------------------------------------------</xmp>
    </body>
    </html>
      

  2.   

    btbtd老大:
    你的回复是对的,但是你把表达式分开来写了,我希望的是在一个表达式中实现所有匹配,因为这个东西不止是在js中使用,别的程序中也要用到
    所以能不能麻烦你再帮我想想,谢谢了谢谢了 :')
      

  3.   

    <script type="text/javascript">
    //<![CDATA[
     var ar=[];
      ar[0]='1234567890?aa=1&bb=0&cc=2';
      ar[1]='1234567890?bb=0&aa=1&cc=2';
      ar[2]='1234567890?cc=2&aa=1&bb=0';
      ar[3]='1234567890?aa=1&bb=0';
      ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4';
      ar[5]='1234567890?dd=3';
      ar[6]='1234567890?ee=4';
      ar[7]='1234567890?dd=3&ee=4';
      ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2';
      ar[9]='1234567890?dd=3&ff=5&ee=4';
      ar[10]='1234567890?dd=3&ee=4';
      ar[11]='12347890?aa=1&bb=0&ff=5&cc=2';
      ar[12]='12567890?dd=3&ff=5&ee=4';
      
      for(var i=0, j=ar.length; i<j; i++){
       document.write(ar[i],' ',fT(ar[i]),'<br/>');
      }
      
      function fT(str){
       return ((/1234567890\?\S+?\=\S+?\&\S+?\=\S+?\&\S+?\=\S+/.test(str)||
       (/(dd\=.|ee\=.)/.test(str)&&/1234567890\?/.test(str)))&&(!/ff\=5/.test(str)&&/1234567890\?/.test(str)));
      }
    //]]>
    </script>PS: 虽然正则我可以写得很复杂, 不过一看就晕, 自己看到都晕的东西肯定不会是好东西...
      

  4.   

    一个正则也可以实现,只是比较麻烦,既然其他地方可以支持正则,为什么不能也拆开和JS的一样。其实写成一个不一定就好,很多语言的正则之间还是有细微的差别的,不一定JS的能用其他的就一定能用
      

  5.   

    <script type="text/javascript">
    var ar = [];
    ar[0]='1234567890?aa=1&bb=0&cc=2';
    ar[1]='1234567890?bb=0&aa=1&cc=2';
    ar[2]='1234567890?cc=2&aa=1&bb=0';
    ar[3]='1234567890?aa=1&bb=0';
    ar[4]='1234567890?aa=1&cc=2&dd=3&ee=4';
    ar[5]='1234567890?dd=3';
    ar[6]='1234567890?ee=4';
    ar[7]='1234567890?dd=3&ee=4';
    ar[8]='1234567890?aa=1&bb=0&ff=5&cc=2';
    ar[9]='1234567890?dd=3&ff=5&ee=4';
    ar[10]='1234567890?dd=3&ee=4';
    ar[11]='1234567890?aa=1&bb=0&ff=5&cc=2';
    ar[12]='1234567890?dd=3&ff=5&ee=4';
    ar[13]='1234567890?ff=4&ee=4';
    ar[14]='1234567890?&ee=4';
    var p = /1234567890\?(?!ff=5)((&?[a-z]+=\d+(?!&ff=5))*?&?(dd=3|ee=4)(?!&ff=5)(&?[a-z]+=\d+(?!&ff=5))*|[a-z]+=\d+(?!&ff=5)&?[a-z]+=\d+(?!&ff=5)(&?[a-z]+=\d+(?!&ff=5))+)/ig;
    var j = ar.join(",").match(p).join("\n");
    alert(j);
    </script>
    没有判断ar[14]那种情况,如果那个也判断了正则会更长。。