Сделал функцию, но имхо вышло как-то криво, сейчас спать, а завтра трезво взгляну.)
function parce(str){
var result=[],
i=0,
re=/([^\[;]+)\[([^\]\[]+)\]/g,
placer = function(a,b,c){
var arr=c.split(';'), j=arr.length;
while(j--)if(arr[j].indexOf('array_')===0)arr[j]=result[arr[j].slice(6)];
arr.toString=function(){return b};
result[i]=arr;
return 'array_' + i++
}
while(~str.indexOf('['))str=str.replace(re,placer)
return result[i-1]
}
var str = "ЭНИ-601[2к[10Вт[вложенность+3[вложенность+4;xxx;zzz];xxx;zzz];20Вт];4к[10Вт;20Вт;30Вт];8к[70Вт;80Вт]];"
arr=parce(str)
alert(
arr+'\n'+
arr[0]+'\n'+
arr[0][0]+'\n'+
arr[0][0][0]+'\n'+
arr[0][0][0][0]
)