首先對**大寫的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