求一个段落中各类括号是否成对出现(匹配)的方法

简单说明:

1.参数是一个数组,数组元素是字符串, 例如:['{}[]()', '{]}','{{[]}}', '[(}[]', '{}[]()[{()}]', '[()]{}{[()]}[]', '{{([()[]{}])[()]}}'], ['{this is a demo, (just for test)}'];

2.检测的括号都是英文状态下的,包括大括号{}、中括号[]、小括号();
3.这个方法的性能并不是特别的好,追求性能的话需要自己根据实际业务情况进行优化改动;
4.方法使用的是原生js写的,没有使用其他的库;
5.输出结果为与输入结果对照顺序的YES和NO字符串,YES表示该数组元素字符串中出现的括号是匹配的,NO则说明该数组元素字符串中的括号是不匹配的。
 
方法全文:
function isMatch(values) {
       let result = [];
       values.forEach(value => {
            let arr = [];
            const temp = ['{', '}', '[', ']', '(', ')'];
            value.split('').forEach(val => {
                temp.forEach(tempVal => {
                    if (val === tempVal) {
                        arr.push(val);
                    }
                })
           })

           let len = arr.length;
           if (len % 2 === 1) {
               result.push('NO');
               return;
           }

           for (let index = 0; index < len;) {
                if (
                    (arr[index] === '{' && arr[index + 1] === '}') ||
                    (arr[index] === '[' && arr[index + 1] === ']') ||
                    (arr[index] === '(' && arr[index + 1] === ')')
                ) {
                    arr.splice(index, 2);
                    index = 0;
                } else {
                    index += 1;
                }
                len = arr.length;
           }
           if (arr.length === 0) {
               result.push('YES');
           } else {
               result.push('NO');
           }
       })
       return result;
   }
 
PS:这个方法本人亲测有效,可以应对各种复杂的括号组合,欢迎修改~~

猜你喜欢

转载自www.cnblogs.com/baibai-smile/p/12325722.html