У меня есть входящие строки, которые отформатированы с использованием метода скобок, который я раньше не видел (я предполагаю сжать размер). Понять сам метод просто, но у меня возникают проблемы с его преобразованием в код.
Вот простой пример входящей строки: 'ADFAS[AA,BT]'
Эта строка требует быть проанализированным так, чтобы это привело к массиву: ['ADFASAA', 'ADFASBT']
.
Важно, чтобы порядок сохранялся в результирующем массиве. Я открыт для любого хорошего чистого ответа, хотя мне нравится идея элегантного рекурсивного метода здесь. Мне не повезло.
Вот более сложный пример: 'INGFKQRRG[I5EEOR[T,U,V,W],Y5ECOR[T,U]]'
, который должен дать результат:
[
'INGFKQRRGI5EEORT', //--
'INGFKQRRGI5EEORU', // \
'INGFKQRRGI5EEORV', // / - these are from the first nested level block and its nested letter endings
'INGFKQRRGI5EEORW', //--
'INGFKQRRGY5ECORT', //--\
'INGFKQRRGY5ECORU', //--/ - these are from the second nested level block and its nested letter endings
]
Входящие строки могут иметь несколько вложенных уровней. Пример: 'GMZTAOSIHI[2Q,3[A,Q],4A]'
Что должно дать:
[
'GMZTAOSIHI2Q',
'GMZTAOSIHI3A',
'GMZTAOSIHI3Q',
'GMZTAOSIHI4A'
]
Вот такой подход, который я использовал до сих пор:
Функция, которая находит наиболее удаленный в скобках substr
function getInnerBracket(s) {
const sBracket = s.indexOf('['),
eBracket = s.lastIndexOf(']');
return t.slice(sBracket + 1, eBracket);
}
Затем я могу проверить строку, чтобы увидеть, имеет ли она ],
, которая указывает, что в возвращаемой строке есть несколько частей, некоторые из которых могут иметь больше вложенных элементов.
function testForSubItems(s) {
return /\],/.test(s)
? s.split('],')
: s;
}
В в этот момент я чувствую себя очень застрявшим, потому что не могу понять, как написать одну функцию-обертку, чтобы рекурсивно отслеживать, когда передать ее обратно этим двум вспомогательным функциям. Каждая попытка заканчивается логи c дырками, и я застреваю.