首页 > 解决方案 > 计算字符串中的括号

问题描述

一直在研究学校的问题,一直没能弄明白。任何帮助表示赞赏!

编写一个名为 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

我对我应该如何让它计算我猜的字符串有点困惑。

标签: javascriptstringcounting

解决方案


您可以为此使用全局正则表达式(正则表达式)匹配。正则表达式/ /后跟 g 标志以使其全局化(否则它只返回它找到并停止的第一个结果)。在正则表达式中,|是 OR 运算符,因此您匹配/{|}|[|]/[,并且]在正则表达式中具有特殊含义,您需要使用 a 转义那些,\因此您的总正则表达式变为/{|}|\[|\]/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] 是否为 {、}、[ 或 ],如果是,则增加一个计数器。完成后,您将返回最终计数。


推荐阅读