字符串中是否括弧是成对合法出现

需求:

有一串字符串,里面包含若干个括弧,如何判断这些括弧是以成对出现的 (),且是合法的括弧 (),括弧支持嵌套

实现思路:

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 的时候才是成对的
}

你可能感兴趣的:(字符串中是否括弧是成对合法出现)