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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章