d1monster
@d1monster
Front-End Developer

Как проверить баланс скобок?

Здравствуйте Тостер-сообщество!

Помогите пожалуйста с небольшим заданием...
Есть JS-код. Нужно написать JS-код, который определяет, соблюдается ли в нем баланс скобок (простых и фигурных).
Например:
js("function test(){ alert(); }") -> true
js("function test)({ alert(); }") -> false

Заранее прошу прощения, если вопрос уж слишком нубский, но я только учусь :)
  • Вопрос задан
  • 6819 просмотров
Решения вопроса 1
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Где то так... https://jsfiddle.net/DigitalBrain/azj0u01d/
function js(text){
         var i,
                 l=text.length,
                 char,
                 last,
                 stack=[];

         for(i=0; i<l; i++){
             char=text[i];

             if(char=="{" || char=="("){
                 stack.push(char);
             }else if(char=="}" || char==")"){
                 if(stack.length>0){
                     last=stack[stack.length-1];
                     if ((char == '}' && last == "{") || (char == ')' && last == '(')) {
                         stack.pop();
                     }
                 }
             }
         }
         return stack.length==0;
     }
     console.info(js("function test(){ alert(); }")); // true
     console.info(js("function test)({ alert(); }")); //false

Слегка оптимизировал
function js(text){
         var i, l=text.length,  char,  last, stack=[];

         for(i=0; i<l; i++){
             char=text[i];
             if(char=="{" || char=="("){
                 stack.push(char);
                 last=char;
             }else if(char == '}' || char == ")"){
                 if(last){
                     if((char == '}' && last == "{") || (char == ')' && last == '('))
                     {
                         stack.pop();
                         last = stack.length > 0 ? stack[stack.length - 1] : undefined;
                     }
                 }else{
                     return false;
                 }
             }
         }
         return stack.length==0;
     }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@asperin2
PHP разработчик
Включите консоль браузера, если что-то не так с синтаксисом Вам покажет где ошибка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы