问题:有一个字符串  roleCode=",AAABB,AAAD,AAAB,AAADA,AAAC,AAADB,AAICA,AAEBA,AAACA,AAAE,AAID,AAIE,AAIBB,AAIDA,AAIB,AAIC,AAIBA,"                                                                                                                                                           
     规定:  A是一个部门,具有最高权限;
            
            AAA*是一个部门(注:只要是AAA开头的就属性AAA部门了.如:AAAE就是属于AAA部门的)
            
            AAB*,解释同上类似.            ...从AAA到AAI.现在我的问题是,如何用js search搜出里面有几个不同的部门,如上面的roleCode就有AAA部门,AAI部门和AAE三个不同的部门.用js 的search可以搜索出来吗?  如果不能,能不能用正则表达式做出来呢??或者你有什么好的办法解决吗? 谢谢.

解决方案 »

  1.   


    <script type="text/javascript">
    <!--
    var roleCode=",AAABB,AAAD,AAAB,AAADA,AAAC,AAADB,AAICA,AAEBA,AAACA,AAAE,AAID,AAIE,AAIBB,AAIDA,AAIB,AAIC,AAIBA,";
    var reg = /(AA[A-I])/g;
    var arr = [];
    for(var i = 0; i < roleCode.match(reg).length; i++){
    if(arr[roleCode.match(reg)[i]] == undefined){
    arr[roleCode.match(reg)[i]] = roleCode.match(reg)[i];
    }
    }
    for(var j in arr){
    document.write("----->" + arr[j])
    }//-->
    </script>
      

  2.   

    A是代表管理员,具有最高权限.AAA代表一个部门.
      

  3.   


    这个代码很好,不过我现在还有一个问题:如果roleCode=",A,AA,AAABB,AAAD,AAAB,AAADA,AAAC,AAADB,AAICA,AAEBA,AAACA,AAAE,AAID,AAIE,AAIBB,AAIDA,AAIB,AAIC,AAIBA,";我在roleCode字符串里加上",A,AA,"了,这种情况很特殊,就是说A和AA也是一个部门,就只两很特殊.如果按照你的写法,只能判断AAA-AAI的部门,还差这两个.有没有办法把它也判断.谢谢.
      

  4.   

    这个代码很好,不过我现在还有一个问题:如果roleCode=",A,AA,AAABB,AAAD,AAAB,AAADA,AAAC,AAADB,AAICA,AAEBA,AAACA,AAAE,AAID,AAIE,AAIBB,AAIDA,AAIB,AAIC,AAIBA,"; 我在roleCode字符串里加上",A,AA,"了,这种情况很特殊,就是说A和AA也是一个部门,就只两很特殊. 如果按照你的写法,只能判断AAA-AAI的部门,还差这两个.有没有办法把它也判断.谢谢.
      

  5.   

    参见:
    <script type="text/javascript">
    var roleCode=",AAABB,AAAD,AAAB,AAADA,AAAC,AAADB,AAICA,AAEBA,AAACA,AAAE,AAID,AAIE,AAIBB,AAIDA,AAIB,AAIC,AAIBA,";
    var m = roleCode.match(/aa[a-i]/ig);
    var um = m.join(',').replace(/\b(aa[a-i]),(?=.*\b\1\b)/ig,'');
    alert(um);
    </script>
      

  6.   

    匹配所有模式的:
    <script type="text/javascript">
    var roleCode=",A,AA,AAABB,AAAD,AAAB,AAADA,AAAC,AAADB,AAICA,AAEBA,AAACA,AAAE,AAID,AAIE,AAIBB,AAIDA,AAIB,AAIC,AAIBA,";
    var m = roleCode.match(/(?:aa[a-i]|a[a-i]|a)/ig);
    var um = m.join(',').replace(/\b([a-i][^,]*),(?=.*\b\1\b)/ig,'');
    alert(um);
    </script>
      

  7.   


    <script type="text/javascript">
    <!--
    var roleCode="A,AA,AAABB,AAAD,AAAB,AAADA,AAAC,AAADB,AAICA,AAEBA,AAACA,AAAE,AAID,AAIE,AAIBB,AAIDA,AAIB,AAIC,AAIBA,";
    var reg = /A(?:A(?:[A-I])?)?/ig;
    var arr = [];
    for(var i = 0; i < roleCode.match(reg).length; i++){
    if(arr[roleCode.match(reg)[i]] == undefined){
    arr[roleCode.match(reg)[i]] = roleCode.match(reg)[i];
    }
    }
    for(var j in arr){
    document.write("----->" + arr[j])
    }//-->
    </script>
      

  8.   

    小弟还有一个问题,如果roleCode="AA,AAABB,AAAD,AAAB,AAADA,AAAC,AAADB,AAICA,AAEBA,AAACA,AAAE,AAID,AAIE,AAIBB,AAIDA,AAIB,AAIC,AAIBA,A,";不变,但是我把A放在最后了,这样虽然能查出结果,但是还不是很理想.能不能做成这样,就是无论查出什么样的结果,只要有A或者AA的,都要按照这个顺序排列A,AA,(如果后面还有,就不管排序情况了);这样做是为了以后方便查询和截取,能不能做成这样,谢谢.