Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.11.2012, 05:17
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

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

'{a{b{c}d}e}f}g}' → 'a{b{c}d}e'
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #2 (permalink)  
Старый 07.11.2012, 08:00
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от iMaxmaxmaximus
Ты имеешь ввиду как сделать так чтобы поведение было как у интерпритатора js когда он определяет что строка а что ВНЕ строки?
Я имею в виду, как интерпретатор понимает, что и к какому блоку принадлежит:
if() {
  if() {
    if() {
    } // 3rd if
  } // 2nd if
} // 1st if
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #3 (permalink)  
Старый 07.11.2012, 09:31
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от iMaxmaxmaximus
все оч просто, создаешь стек, и начинаешь пробегаться по символам от начала строки, при нахождении открывающей скобки помещаешь её в стек, при нахождении закрывающей скобки убираешь её из стека. когда количество станет равно нулю, значит внешняя скобочная группа закрылась. )) Суть я думаю понятна)?
Ну это было первой идеей.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #4 (permalink)  
Старый 08.11.2012, 00:43
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

вариант (на скорую руку)
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 ] )
);
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #5 (permalink)  
Старый 08.11.2012, 04:06
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

nerv_, хм, прикольно. Не могу плюсануть только.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
Отследить клик по дочернему объекту AllanZ jQuery 3 05.09.2012 12:38
Выравнять три дива в одной строке debugx (X)HTML/CSS 9 06.10.2011 12:03
Вопрос по относительному позиционированию DIV XPOMOB (X)HTML/CSS 11 15.07.2009 17:02