有一个字符串,按照一定格式分隔为数组,例:var a='a b:{a:"a b c"} c d:{a:"a b c",b:"x y"} e',b;
var reg=/ /;//正则表达式,以空格为分隔符,注意{}中的空格,任意一对{}中的空格都不参与分割
b=a.split(reg);//需要得到结果为['a','b:{a:"a b c"}','c','d:{a:"a b c",b:"x y"}','e']a="b:{a:'a b c'}";
reg=/ /;//正则表达式,以第一个':'为分隔符,只是第一个':'
b=a.split(reg);//需要得到的结果为['b','{a:"a b c"}']

解决方案 »

  1.   

    1. (?<!{[^}]*)\s  
      貌似JS正则不支持 (?<!) 2.可不可以理解为 {} 内的 :  不参与分组?
      

  2.   

    第二个var a = "b:{a:'a b c'}";
    var r = /(.*):({.*})/;
    a = r.test(a);
    var arr = new Array(RegExp.$1, RegExp.$2);
    alert(arr)
      

  3.   


    var a='a b:{a:"a b c"} c d:{a:"a b c",b:"x y"} e';
    a='}'+a+'{';
    a=a.replace(/\}([^\{\}]*)\{/g,function (){return '}'+arguments[1].replace(/ /g,'\\ ')+'{';});
    a=a.replace(/^}|{$/g,'');
    alert(a.split(/\\ /).join('----'));我加了一个"\"区分大括号外面的空格 LZ可以根据具体情况换成其他
    第二个 类似于第一个 把" "格换成":"就行了
      

  4.   


    var a="b:{a:'a b c'}";
    reg=/:(?=.*$)/;
    b=a.split(reg);
    alert(b);
      

  5.   

    正则不是万能的,一版不要用它来处理只截取第几个这类的操作。
    var a='a b:{a:"a b c"} c d:{a:"a b c",b:"x y"} e',b;
    var reg=/(\w+:\{.*?\})|(\w+)/g;
    var b = [];
    var match;while( match = reg.exec(a) ){
        b.push(match[0]);
    }alert(b.join(' | '));var c = [], s="b:{a:'a b c'}", index = s.indexOf(':') ;
    if( index  > -1 ){
        c.push(s.slice(0, index));
        if( index < s.length - 1 ){
             c.push(s.slice(index+1))
        }
    }else{
        c.push[s];
    }alert(c.join(' | '));
      

  6.   

    var regex = / (?=([^}]+\{)|[^ ]+$)/g;
    var str = 'a b:{a:"a b c"} c d:{a:"a b c",b:"x y"} e';
    str = str.replace(regex,"~").split("~")
    document.write("['"+str.join("','")+"']");//数组
    //['a','b:{a:"a b c"}','c','d:{a:"a b c",b:"x y"}','e']
    //---------------
    document.write("<br/>")
    str = "b:{a:'a b c'}";
    str = str.split(/\:(?=\{)/);//数组
    document.write('["'+str.join('","')+'"]')
    //["b","{a:'a b c'}"]
      

  7.   

    不知道楼主是不是这么想的,把元素用空格分开,元素可能为对象类型或者其他各种类型。如果是的话就反过来想吧,先获取了各种类型的所有元素,然后再分割。贴上代码,供参考:var test='a a:{a:{a:{a:"a b"},b:"a b"},b:{}} c:{c:"a b c"} b c';var reg=/[^ ]*{.*}/;
    var objs=test.match(reg);
    test=test.replace(reg,'');//其他类型的元素……
    reg=/ /;
    objs=test.match(reg);
    test=test.replace(reg,'');……至于第二个,就像7楼说的,建议使用replace替换掉第一个冒号再分割吧