需求:
有一串字符串,里面包含若干个括弧,如何判断这些括弧是以成对出现的 (),且是合法的括弧 (),括弧支持嵌套
实现思路:
1.通过正则过滤出括弧(普通写法就是通过split分割字符串成一个数组,并过滤出来
(
,)
);
2.如果长度为0,或者不是偶数直接返回false;
3.根据左右括弧出现的顺序自加和自减,数字一定要大于等于0,因为小于0,就表示右括弧在前,不是合法的。
function isBrackets(str) {
//过滤出所有的括弧
//const arr = str.split('').filter(item => item === '(' || item === ')');
const arr = str.replace(/[^(^)]/g, '').split('');
const len = arr.length;
if (!len || (len % 2 !== 0)) { // 如果长度为0,或者不是偶数
return false;
}
let num = 0;
arr.forEach(item => {
/*
* 只有数字大于等于0时,表示左括号是多余和等于右括号啊,
* 如果是右括号多,就表示已经有不合法的括号了
*/
if (num >= 0) {
if (item === '(') { // 如果是左括弧就自加1
num++;
}
if (item === ')') { // 如果是右括弧就自减1
num--;
}
}
});
return num === 0; // 只有数量为0 的时候才是成对的
}