Подсчет скобок в строке - PullRequest
0 голосов
/ 03 ноября 2019

работал над школьной проблемой и не смог ее решить. Любая помощь приветствуется!

Напишите функцию с именем countBrackets, которая принимает строку и возвращает количество квадратных и фигурных скобок в строке. То есть он должен считать количество этих четырех символов «{} []». Используйте синтаксис выражения функции.

    var countBrackets = function(s){
    let sum = 0

    for(let i = ""; i == s ; i++ )
    if(i ==="{}[]"){
        sum+=i
    }
     return sum}

 console.log(countBrackets("[123],{456},[{}]")) //8
 console.log(countBrackets("Test string")) // 0

Я немного запутался в том, как я должен заставить его считать строку, я думаю.

1 Ответ

1 голос
/ 03 ноября 2019

Для этого вы можете использовать глобальное регулярное выражение (регулярное выражение). Регулярное выражение находится между / /, за которым следует флаг g, чтобы сделать его глобальным (в противном случае он возвращает только первый найденный результат и останавливается). В регулярном выражении | является оператором ИЛИ, поэтому вы подходите для /{|}|[|]/ Поскольку [ и ] имеют особое значение в регулярных выражениях, вам нужно экранировать те, которые используют \, поэтому ваше общее регулярное выражение становится /{|}|\[|\]/g. Это возвращает массив совпадений, я назвал функцию findBrackets. Чтобы получить количество скобок, функция countBrackets просто возвращает .length этого массива.

const findBrackets = str => str.match(/{|}|\[|\]/g);
const countBrackets = str => findBrackets(str) ? findBrackets(str).length : 0;

console.log(findBrackets('qw[e}rt[y]ui{}o{p'));
console.log(countBrackets('qw[e}rt[y]ui{}o{p'));
console.log(countBrackets('no brackets here'));

Редактировать: увидев код, который вы разместили, вы решили использовать цикл for, чтобы зациклить вашу строку, что является полностью допустимым решением. Обратите внимание, что в моем приведенном выше примере const findBrackets = str => str.match(/{|}|\[|\]/g); в основном такой же, но более новый способ написания функций (с несколькими нюансами), я мог бы написать:

var findBrackets = function(str) {
   return str.match(/{|}|\[|\]/g);
}

вместо этого, который будет почти таким же.

Если вы хотите зациклить строку, вы можете получить доступ к букве в строке, используя обозначение в квадратных скобках, например,

const testString = 'hello';
console.log(testString[1]);

Выведет букву 'e'.

Итак, чтобы использовать это в функции:

const countBrackets = (str) => {
    let counter = 0;
    for (let i = 0; i < str.length; i++) {
        if (str[i] === '[' || str[i] === ']' || str[i] === '{' || str[i] === '}') {
            counter++;
        }
    }
    return counter;
}

console.log(countBrackets('qw[e}rt[y]ui{}o{p'));

Здесь вы перебираете строку от 0 до <длина строки и проверяете каждую букву, проверяя, является ли str [i] {,}, [или], и если это так, вы увеличиваете счетчик. После этого вы возвращаете окончательный счет. </p>

...