Строка
Sayavdera | 死亡Ответ:
const decodeString = (s) => {
const replace = (str) =>
/\[+/.test(str)
? replace(
str.replace(/(\d+)\[(\w+)\]/, (_, num, group) => group.repeat(num))
):str;
return replace(s);
};
Объяснение:
Создаём рекурсивную функцию replace, которая проверяет, есть ли в переданной строке открывающая скобка [ . Если она есть,вызывает себя же, перед этим заменив в строке все группы с нулевой вложенностью. ( например, есть строка 3[a2[c]]] - в этой строке группа с нулевой вложенностью это 2[c].) Если скобок в строке нет, возвращает переданную строку.
Код для проверки:
const decodeString = (s) => {
const replace = (str) =>
/\[+/.test(str)
? replace(
str.replace(/(\d+)\[(\w+)\]/, (_, num, group) => group.repeat(num))
)
: str;
return replace(s);
};
console.log(decodeString('3[a]2[bc]')); // 'aaabcbc'
console.log(decodeString('3[a2[c]]')); // 'accaccacc'
console.log(decodeString('2[abc]3[cd]ef')); // 'abcabccdcdcdef'
console.log(decodeString('abc3[cd]xyz')); // 'abccdcdcdxyz'