字符串:color-white-black--name-'a-b'-ppg--style-'c''-d'-beauty-fashion
1. --表示组的分隔符。
2. -表示分隔符。
3. 字符串内有-或者’的字符串两边加'',如a-b由于含有-,表示为'a-b',c'-d表示为'c''-d'。
3. 分割的字符串放入二维数组。
所以上述字符串分割后的结果是:
一个二维数组,数组每项如下:
arr[0][0] = "color";
arr[0][1] = "white";
arr[0][2] = "black";
arr[1][0] = "name";
arr[1][1] = "a-b";
arr[1][2] = "ppg";
arr[2][0] = "style";
arr[2][1] = "c'-d";
arr[2][2] = "beauty";
arr[2][3] = "fashion";

解决方案 »

  1.   


    var s = "color-white-black--name-'a-b'-ppg--style-'c''-d'-beauty-fashion";
    var a=[];
    var b = s.split("--");
    for(var i=0;i<b.length;i++){
       a[i] = parse(b[i]);
    }
    for(var i=0;i<b.length;i++){
       for(var j=0;j<a[i].length;j++)
            alert("a["+i+"]["+j+"] = " + a[i][j]);
    }
    function parse(str){
        arr = [];
        var bqf=false;
        var s = "";
        for(var i=0;i<str.length;i++){
            var c  = str.charAt(i);
            switch(c){
               case '-':if(!bqf){
                            if(s!="") arr.push(s);
                            s = "";
                        }
                        else s +=c;
                        break;  
               case "'":if(bqf){
                            var tc = str.charAt(i+1);
                            if(tc=="'"){
                                 s += "'";
                                 i++;
                            }
                            else bqf = false;
                        }
                        else{
                            bqf = true;   
                        }
                        break; 
               default: s +=c;
            }
        }
        if(s!="") arr.push(s);
        return arr;
    }
      

  2.   


    var s = "color-white-black--name-'a-b'-ppg--style-'c''-d'-beauty-fashion";
    var a=[];
    var b = s.split("--");
    for(var i=0;i<b.length;i++){
       a[i] = parse(b[i]);
    }
    for(var i=0;i<b.length;i++){
       for(var j=0;j<a[i].length;j++)
            alert("a["+i+"]["+j+"] = " + a[i][j]);
    }
    function parse(str){
        arr = [];
        var bqf=false;
        var s = "";
        for(var i=0;i<str.length;i++){
            var c  = str.charAt(i);
            switch(c){
               case '-':if(!bqf){
                            if(s!="") arr.push(s);
                            s = "";
                        }
                        else s +=c;
                        break;  
               case "'":if(bqf){
                            var tc = str.charAt(i+1);
                            if(tc=="'"){
                                 s += "'";
                                 i++;
                            }
                            else bqf = false;
                        }
                        else{
                            bqf = true;   
                        }
                        break; 
               default: s +=c;
            }
        }
        if(s!="") arr.push(s);
        return arr;
    }
      

  3.   


    <script type="text/javascript">
    <!--
    var str = "color-white-black--name-'a-b'-ppg--style-'c''-d'-beauty-fashion";
    arr = str.replace(/'([a-z]+)-([a-z]+)'/i,"$1*$2").replace(/'(.*?)''-(.*?)'/,"$1'*$2").split("--");
    for(var i = 0; i < arr.length; i++){
    for(var j = 0; j < arr[i].split('-').length; j++){
    document.write(arr[i].split("-")[j].replace("*","-")+"<br/>");
    }
    }
    //-->
    </script>
      

  4.   


    <script type="text/javascript">
    <!--
    var str = "color-white-black--name-'a-b'-ppg--style-'c''-d'-beauty-fashion";
    arr = str.replace(/'([a-z]+)-([a-z]+)'/i,"$1*$2").replace(/'(.*?)''-(.*?)'/,"$1'*$2").split("--");// 测试CSDN显示代码滚动条BUG
    for(var i = 0; i < arr.length; i++){
    for(var j = 0; j < arr[i].split('-').length; j++){
    document.write(arr[i].split("-")[j].replace("*","-")+"<br/>");
    }
    }
    //-->
    </script>CSDNzh