使用栈来解析------------------------3[d]2[ab]2[c]、3[3[d]2[ab]2[c]]为key:value的形式
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)