Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получить текст между открывающей и закрывающей скобкой (https://javascript.ru/forum/misc/33003-poluchit-tekst-mezhdu-otkryvayushhejj-i-zakryvayushhejj-skobkojj.html)

FINoM 07.11.2012 05:17

Получить текст между открывающей и закрывающей скобкой
 
Что-то не могу придумать грамотного пути решения следующей задачи. Нужно получить содержимое между открывающей и закрывающей скобкой, при чем, внутри и снаружи может быть произвольное количество этих скобок:

'{a{b{c}d}e}f}g}' → 'a{b{c}d}e'

FINoM 07.11.2012 08:00

Цитата:

Сообщение от iMaxmaxmaximus
Ты имеешь ввиду как сделать так чтобы поведение было как у интерпритатора js когда он определяет что строка а что ВНЕ строки?

Я имею в виду, как интерпретатор понимает, что и к какому блоку принадлежит:
if() {
  if() {
    if() {
    } // 3rd if
  } // 2nd if
} // 1st if

FINoM 07.11.2012 09:31

Цитата:

Сообщение от iMaxmaxmaximus
все оч просто, создаешь стек, и начинаешь пробегаться по символам от начала строки, при нахождении открывающей скобки помещаешь её в стек, при нахождении закрывающей скобки убираешь её из стека. когда количество станет равно нулю, значит внешняя скобочная группа закрылась. )) Суть я думаю понятна)?

Ну это было первой идеей.

nerv_ 08.11.2012 00:43

вариант (на скорую руку)
var text = '{a{b{c}d}e}f}g}';
var left = text.length;
var right = -1;
var arr = [];

while( ~( right = text.indexOf( '}', right + 1 ) ) &&
         ~( left = text.lastIndexOf( '{', left - 1 ) ) ) {
    arr.push([
        left, right + 1
    ]);
}

alert(
    text.slice( arr[ 0 ][ 0 ], arr[ 0 ][ 1 ] ) + '\n' +
    text.slice( arr[ 1 ][ 0 ], arr[ 1 ][ 1 ] ) + '\n' +
    text.slice( arr[ 2 ][ 0 ], arr[ 2 ][ 1 ] )
);

FINoM 08.11.2012 04:06

nerv_, хм, прикольно. Не могу плюсануть только.


Часовой пояс GMT +3, время: 23:05.