1 let str = '3[d]2[ab]2[c]'
2 let i = 0;
3 let stark1 = [];
4 let stark2 = [];
5 var rest = str;
6 function smartRepeat(str) {
7 while (i < str.length - 1) {
8 rest = str.substring(i);
9 if (/^(\d+)\[/.test(rest)) {
10 let times = Number(rest.match(/^(\d+)\[/)[1])
11 i += times.toString().length + 1;
12 stark1.push(rest.match(/^(\d+)\[/)[1]);
13 stark2.push('');
14 } else if (/^\w+\]/.test(rest)) {
15 let word = rest.match(/^(\w+)\]/)[1];
16 if (stark2.length == 1) {
17 stark2[1] = word;
18 } else {
19 stark2[stark2.length - 1] = word;
20 }
21 i += word.length;
22 } else if (rest[0] == ']') {
23 let times = stark1.pop();
24 let word = stark2.pop();
25 stark2[stark2.length - 1] += word.repeat(times);
26 i++;
27 }
28 }
29 return stark2.length > 1 ? stark2[0] += stark2[1].repeat(stark1[0]) : stark2[0].repeat(stark1[0]);
30 }
31 smartRepeat(str)