alex-romanov, пишешь много, но не особо проясняешь ситуацию...
Вот сделал набросок по проблеме как я ее понял и описал выше.
var str='[ ] x ] x]';
var re=/\[|\]/;
var arr=[];
test(str);
alert(str+'\n'+arr);
str='[ x] x] [ x]x ]';
arr=[];
test(str);
alert(str+'\n'+arr);
function test(Str){
ok(Str);
var n=Str.split(re).length-1;
var str;
for (var i=0; i<n; i++) {
str=del(Str,i);
if (re.test(str)) {
test(str);
};
};
};
function del(Str,Pos) {
var str=Str.replace(/\[|\]/g,'|');
var pos=0;
var d=0;
for (var i=0; i<Pos+1; i++) {
pos=str.indexOf('|',pos+d);
if (pos==-1) {
return Str;
};
d=1;
};
str=Str.substring(0,pos);
str+=Str.substring(pos+1);
return str;
};
function ok(Str){
if (arr.indexOf(Str)!=-1) {
return false;
};
var val;
var a=0;
var b=0;
for (var i=0;i<Str.length; i++) {
val=Str.charAt(i)
if (val=='[') {
a++;
};
if (val==']') {
b++;
};
if (b>a) {
return false;
};
};
if (a!=b) {
return false;
};
arr[arr.length]=Str;
return true;
};
Что в итоге нужно тебе, я так и не понял...