需求:
有一串字符串巷怜,里面包含若干個(gè)括弧,如何判斷這些括弧是以成對(duì)出現(xiàn)的 ()暴氏,且是合法的括弧 ()延塑,括弧支持嵌套
實(shí)現(xiàn)思路:
1.通過(guò)正則過(guò)濾出括弧(普通寫法就是通過(guò)split分割字符串成一個(gè)數(shù)組,并過(guò)濾出來(lái)
(
答渔,)
)关带;
2.如果長(zhǎng)度為0,或者不是偶數(shù)直接返回false沼撕;
3.根據(jù)左右括弧出現(xiàn)的順序自加和自減宋雏,數(shù)字一定要大于等于0,因?yàn)樾∮?务豺,就表示右括弧在前磨总,不是合法的。
function isBrackets(str) {
//過(guò)濾出所有的括弧
//const arr = str.split('').filter(item => item === '(' || item === ')');
const arr = str.replace(/[^(^)]/g, '').split('');
const len = arr.length;
if (!len || (len % 2 !== 0)) { // 如果長(zhǎng)度為0笼沥,或者不是偶數(shù)
return false;
}
let num = 0;
arr.forEach(item => {
/*
* 只有數(shù)字大于等于0時(shí)蚪燕,表示左括號(hào)是多余和等于右括號(hào)啊,
* 如果是右括號(hào)多敬拓,就表示已經(jīng)有不合法的括號(hào)了
*/
if (num >= 0) {
if (item === '(') { // 如果是左括弧就自加1
num++;
}
if (item === ')') { // 如果是右括弧就自減1
num--;
}
}
});
return num === 0; // 只有數(shù)量為0 的時(shí)候才是成對(duì)的
}