使用字符替换将数组像字符串替换为数组

时间:2013-10-29 06:29:08

标签: javascript regex arrays string replace

我有一个像"12,a,{3,4},b,c"这样的字符串,我需要把它转换成一个数组,其中花括号中的元素应该是一个子数组,结果应该是这样的

["12","a",[3,4],"b","c"]

其他例如:

"12,a,b,c,{e,f}" --> ["12","a","b","c", ["e","f"]]

"{12,a},b,c,{c,d}" --> [["12","a"],"b","c", ["e","f"]]

3 个答案:

答案 0 :(得分:1)

您可以尝试以下代码:

a = "{12,a},b,c,{c,d}";
m = a.match(/{[^}]*}|[^,]+/g);
arr=[];

for (i=0; i<m.length; i++) {
    if (m[i].indexOf('{') >= 0)
        arr.push(m[i].replace(/[{}]/g, "").split(/,/));
    else
    arr.push(m[i]);
}
console.log(arr);

<强>输出:

[[12,a],b,c,[c,d]]

答案 1 :(得分:0)

var a = "12,a,{3,4},b,c,{2,3}";
var b = eval(("[" + a.replace(/{/g, '[').replace(/}/g, ']') + "]").replace(/[a-zA-Z]/g, function (all, match) { return "'" + all+ "'";}));
console.log(b)

试试这个

答案 2 :(得分:0)

你可以尝试一下。

var m = "{12,a},b,c,{c,d}".split(','),

result = m.reduce( function( a, b) {

    if ( b.indexOf('{') !== -1 || a.t.length ){
        a.t.push( b.replace(/\{|\}/,'') );
    } else {
        a.array.push( b );
    }

    if ( b.indexOf('}') !== -1 ){
        a.array.push( a.t );
        a.t = [];
    }
    return a ;

}, { array:[],t:[]} ).array;

console.log( result );