您的位置:首页 > Web前端 > JavaScript

JS简单实现括号匹配问题

2017-04-26 16:35 351 查看
http://blog.csdn.net/u012989536/article/details/51931848

算法简述
a:遍历输入测试的字符串,模板括号字符加入数组(用于最后进行比较判断);
b:遍历字符串数组,先进行判断长度为空,在进行判断是否为奇偶数,如果是偶数,就进行下一步,比较算法为:遍历字符串数组,如果是右括号,就让它和前面一位的字符进行匹配,匹配成功就移除掉两个元素,然后从头遍历。匹配不成功就接着往下循环。如果到最后数组的元素长度为空,那么完全匹配,如果还有元素,就说明匹配不成功

示例代码

[javascript] view
plain copy

 





var moduleJson = {//括号匹配模板,你可以增加别的匹配,比如“{}”,“<>”,等,只需写入moduleJson里面去    

    ")":"(",    

    "]":"["    

    

}    

    

var testStr = "([()]())()()";//测试字符串    

var tempSaveArray = [];//用于存储字符串的数组    

for(var i = 0;i<testStr.length;i++){//如果存在括号字符,就加入数组    

    for(var key in moduleJson){    

        if(testStr[i] == key||testStr[i]==moduleJson[key]){//如果字符串中存在json中的key 和value字符,就加入数组    

            tempSaveArray.push(testStr[i]);    

        }    

    }    

}    

if(tempSaveArray.length){    

    if((tempSaveArray.length%2)!=0){//如果括号的长度为奇数,肯定不匹配    

        console.log("括号不匹配");    

    }else{//如果字符串括号长度为偶数,就进行遍历数组,进行判断 12345  0 4    

  

        for(var j = 0;j<tempSaveArray.length;j++){  

            //(((())))  

            if(moduleJson[tempSaveArray[j]]){//如果是右括号,就和前一个进行匹配。  

                //拿到数组前一位的字符,是否与自己匹配  

                if(j>0){  

                    console.log("前一个元素:"+j+tempSaveArray[j-1]+" 后一个元素"+moduleJson[tempSaveArray[j]]);   

                    console.log(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]);  

                    if(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]){//说明两个括号进行了匹配,让其出栈  

                            tempSaveArray.splice(j-1,2);  

                            j=0;//从新遍历数组  

                    }  

                }    

            }  

        }   

  

        if(tempSaveArray.length){//没有移除完毕  

            console.log("括号不匹配");  

        } else{  

            console.log("括号匹配,恭喜你语法正确!");   

        }  

    }    

}else{    

    console.log("你输入的字符串不存在括号");    

}   

t/u012989536/article/details/51931848
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: