JS判断括号是否匹配

首先对**大写的ZDQ**博主的感谢,灵感源于此.

判断括号是否匹配–JavaScript

根据给定的一段字符串,判断字符串中的括号()[]{}是否按规则一一对应

思路

括号一定是成对出现的.
字符串中遇到的闭合括号,一定是和它的前一个开始括号是一对.

说明

如果匹配正确,返回 -1
如果匹配错误,返回 索引值

如果是单纯的判断,也可以改成 布尔值.

兼容写法

function isValid(str){
    if(!str.trim()) return -1;
    var stack = [];
    var keys   = [')',']','}'];
    var values = ['(','[','{'];
    var isBreak = -1;
    for(var i=0;i<str.length;i++){
        var char = str.charAt(i);
        if(values.includes(char)){
            // 开始
            stack.push(char);

        }else{
            var index = keys.indexOf(char);
            if(index > -1){
                // 闭合
                if(!stack.length || values[index] != stack.pop()){
                    isBreak = i;
                    break;
                }
            }
        }
    }
    if(isBreak > -1){
        return isBreak
    }
    return stack.length - 1
}

简单写法

IE 不兼容,主要是因为用到了ES6的语法

function isValid(str){
    if(!str.trim()) return -1;
    var stack = [];
    var dict = {"]": "[", "}": "{", ")": "("};
    var values = Object.values(dict);
    var isBreak = -1;
    for(var i=0;i<str.length;i++){
        var char = str.charAt(i);
        if(values.includes(char)){
            stack.push(char);

        }else if(dict[char]){
            if(!stack.length || dict[char] != stack.pop()){
                isBreak = i;
                break;
            }
        }
    }
    if(isBreak > -1){
        return isBreak
    }
    return stack.length - 1
}

验证

document.write('() : '+isValid('()'));
document.write('<br>');
document.write('()[]{} : '+isValid('()[]{}'));
document.write('<br>');
document.write('(] : '+isValid('(]'));
document.write('<br>');
document.write('([)] : '+isValid('([)]'));
document.write('<br>');
document.write('{[]} : '+isValid('{[]}'));
document.write('<br>');
document.write('(()()) : '+isValid('(()())'));
document.write('<br>');
document.write('((() : '+isValid('((()'));

参考:

https://blog.csdn.net/u010712012/article/details/83856371

### 回答1: 可以使用栈来实现判断括号是否成对。遍历字符串,当遇到左括号时入栈,当遇到右括号时出栈,如果栈为空或者栈顶元素不是对应的左括号,则说明括号不成对,返回false,否则继续遍历。最后如果栈为空,则说明括号全部成对,返回true,否则返回false。 示例代码如下: ```javascript function isParenthesesMatched(str) { const stack = []; for (let i = 0; i < str.length; i++) { if (str[i] === '(' || str[i] === '[' || str[i] === '{') { stack.push(str[i]); } else if (str[i] === ')' && stack[stack.length - 1] === '(') { stack.pop(); } else if (str[i] === ']' && stack[stack.length - 1] === '[') { stack.pop(); } else if (str[i] === '}' && stack[stack.length - 1] === '{') { stack.pop(); } else { return false; } } return stack.length === 0; } ``` 使用示例: ```javascript console.log(isParenthesesMatched('()')); // true console.log(isParenthesesMatched('()[]{}')); // true console.log(isParenthesesMatched('(]')); // false console.log(isParenthesesMatched('([)]')); // false console.log(isParenthesesMatched('{[]}')); // true ``` ### 回答2: 在ES6中,我们可以使用一种简单的方法来判断括号是否成对。这个方法是通过使用数组和循环来实现的。 首先,我们需要定义一个函数,它将接收一个字符串作为参数,这个字符串将包含各种字符,包括括号。接着,我们将创建一个空数组,用于存储遇到的所有括号。 接下来,我们使用一个for循环来遍历字符串中的每个字符。如果我们遇到了一个开括号(‘(’,‘[’,‘{’),我们就将它添加到数组中。如果我们遇到的是一个闭括号(‘)’,‘]’,‘}’),我们将检查数组中的最后一个元素是否与当前的闭括号相匹配。如果是匹配的,则我们将数组中的最后一个元素弹出。如果不匹配,或者数组为空,则说明括号没有成对出现,返回false。 最后,在循环结束后,我们将检查数组中是否还有剩余的括号。如果有,则说明括号没有成对出现,返回false。如果数组为空,则说明所有的括号都成对出现,返回true。 以下是一个示例函数的代码实现: ```javascript function checkParentheses(str) { let arr = []; for(let i = 0; i < str.length; i++) { if(str[i] === '(' || str[i] === '[' || str[i] === '{') { arr.push(str[i]); } else if(str[i] === ')' || str[i] === ']' || str[i] === '}') { if(arr.length === 0) { return false; } if((str[i] === ')' && arr[arr.length-1] === '(') || (str[i] === ']' && arr[arr.length-1] === '[') || (str[i] === '}' && arr[arr.length-1] === '{')) { arr.pop(); } else { return false; } } } return arr.length === 0; } ``` 使用这个函数,我们可以轻松地判断一个字符串中的括号是否成对出现。返回true表示括号成对,返回false表示括号没有成对出现。 ### 回答3: ES6提供了一个很简洁的方法来判断括号是否成对,即使用箭头函数以及Array的一些方法。我们可以通过以下步骤来实现该功能: 首先,我们将输入的字符串转成数组,并使用Array的filter方法来过滤掉除了括号之外的所有字符。这样我们就只剩下了括号。 接下来,利用reduce方法对数组进行遍历,同时使用一个计数器来判断括号是否成对。当遇到左括号时,计数器加1;当遇到右括号时,计数器减1。最后,如果计数器的值为0,则表示所有括号都成对,否则就表示有括号没有成对。 最后,我们将判断结果返回即可。 以下是一个用于判断括号成对的ES6箭头函数的实现代码: const isMatchingBrackets = (str) => { const brackets = str.split("").filter(char => ['(', ')', '[', ']', '{', '}'].includes(char)); let count = 0; return !brackets.reduce((acc, char) => { if (char === '(' || char === '[' || char === '{') { count++; } else { count--; } return count < 0 ? acc + 1 : acc; }, 0); }; 该函数会返回一个布尔值,true表示所有括号成对,false表示有括号没有成对。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了 义

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值