1. 程式人生 > >JS簡單實現括號匹配問題

JS簡單實現括號匹配問題

http://blog.csdn.net/u012989536/article/details/51931848

演算法簡述
a:遍歷輸入測試的字串,模板括號字元加入陣列(用於最後進行比較判斷);
b:遍歷字串陣列,先進行判斷長度為空,在進行判斷是否為奇偶數,如果是偶數,就進行下一步,比較演算法為:遍歷字串陣列,如果是右括號,就讓它和前面一位的字元進行匹配,匹配成功就移除掉兩個元素,然後從頭遍歷。匹配不成功就接著往下迴圈。如果到最後陣列的元素長度為空,那麼完全匹配,如果還有元素,就說明匹配不成功


示例程式碼

[javascript] view plain copy 在CODE上檢視程式碼片派生到我的程式碼片
  1. var moduleJson = {//括號匹配模板,你可以增加別的匹配,比如“{}”,“<>”,等,只需寫入moduleJson裡面去  
  2.     ")":"(",    
  3.     "]":"["
  4. }    
  5. var testStr = "([()]())()()";//測試字串  
  6. var tempSaveArray = [];//用於儲存字串的陣列  
  7. for(var i = 0;i<testStr.length;i++){//如果存在括號字元,就加入陣列  
  8.     for(var key in moduleJson){    
  9.         if(testStr[i] == key||testStr[i]==moduleJson[key]){//如果字串中存在json中的key 和value字元,就加入陣列  
  10.             tempSaveArray.push(testStr[i]);    
  11.         }    
  12.     }    
  13. }    
  14. if(tempSaveArray.length){    
  15.     if((tempSaveArray.length%2)!=0){//如果括號的長度為奇數,肯定不匹配  
  16.         console.log("括號不匹配");    
  17.     }else{//如果字串括號長度為偶數,就進行遍歷陣列,進行判斷 12345  0 4  
  18.         for(var j = 0;j<tempSaveArray.length;j++){  
  19.             //(((())))
  20.             if(moduleJson[tempSaveArray[j]]){
    //如果是右括號,就和前一個進行匹配。
  21.                 //拿到陣列前一位的字元,是否與自己匹配
  22.                 if(j>0){  
  23.                     console.log("前一個元素:"+j+tempSaveArray[j-1]+" 後一個元素"+moduleJson[tempSaveArray[j]]);   
  24.                     console.log(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]);  
  25.                     if(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]){//說明兩個括號進行了匹配,讓其出棧
  26.                             tempSaveArray.splice(j-1,2);  
  27.                             j=0;//從新遍歷陣列
  28.                     }  
  29.                 }    
  30.             }  
  31.         }   
  32.         if(tempSaveArray.length){//沒有移除完畢
  33.             console.log("括號不匹配");  
  34.         } else{  
  35.             console.log("括號匹配,恭喜你語法正確!");   
  36.         }  
  37.     }    
  38. }else{    
  39.     console.log("你輸入的字串不存在括號");    
  40. }   

t/u012989536/article/details/51931848