let decodeString = function (s) { let reg = new RegExp(/(\d+)\[([a-zA-Z]+)\]/g) let str = s.replace(reg, (m,p1,p2) => { return p2.repeat(p1) }) return reg.test(str) ? decodeString(str) : str } console.log(decodeString("3[a]2[bc]")) console.log(decodeString("3[a2[c]]")) console.log(decodeString("2[abc]3[cd]ef")) console.log(decodeString("abc3[cd]xyz")) console.log(decodeString("3[a2[c3[ha]]]"))