工作中遇到一個問題,兩個字符串匹配,要求:每個字符串中最多含有一個*,?可以無限多個
*代表一個任意長度的字符串,而?則代表一個字符
要求可以提示出兩個衝突
複製代碼代碼如下:<input type="text" id="str1"><br>
<input type="text" id="str2"><br>
<input type="button" onclick="checkMarchX()" value="CHECK">
用JavaScript實現代碼如下:
function checkMarchX(){var str1 = document.getElementById('str1').value;var str2 = document.getElementById('str2').value;var str1XPosition = str1.indexOf('*');var str2XPosition = str2.indexOf('*');if(str1XPosition!=-1 && str2XPosition!=-1)//兩者都含有*{var position = str1XPosition>str2XPosition?str2XPosition:str1XPosition;//successif(position!=0){var patbeforeStr1 = str1.substring(0,position);var patbeforeStr2 = str2.substring(0,position);if(checkMarchQ(patbeforeStr1,patbeforeStr2)){//alert(str1+'與'+str2+"前半部分衝突");//然後對應後半部分進行測試var str1XBackPosition = str1.length-str1XPosition-1;var str2XBackPosition = str2.length-str2XPosition-1;var backposition = str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition;if (backposition==0){alert(str1+'與'+str2+"衝突");}else{var patbackStr1 = str1.substring(str1.length-backposition,str1.length);var patbackStr2 = str2.substring(str2.length-backposition,str2.length);if(checkMarchQ(patbackStr1,patbackStr2)){alert(str1+'與'+str2+"衝突");}}}}else{//alert(str1+'與'+str2+"前半部分衝突");var str1XBackPosition = str1.length-str1XPosition-1;var str2XBackPosition = str2.length-str2XPosition-1;var backposition = str1XBackPosition>str2XBackPosition?str2XBackPosition:str1XBackPosition;if (backposition==0){alert(str1+'與'+str2+"衝突");}else{var patbackStr1 = str1.substring(str1.length-backposition,str1.length);var patbackStr2 = str2.substring(str2.length-backposition,str2.length);if(checkMarchQ(patbackStr1,patbackStr2)){alert(str1+'與'+str2+"衝突");}}}}else if((str1XPosition==-1 && str2XPosition!=-1)||(str1XPosition!=-1 && str2XPosition==-1))//有且只有一個字符串含有*{var strX = str1XPosition==-1?str2:str1;//含有*的字符串var strNoX = str1XPosition==-1?str1:str2;//不含*的字符串if (strX.length-1<strNoX.length){var position = strX.indexOf('*');if(position==0){//alert(str1+'與'+str2+"前半部分衝突");var backposition = strX.length-position-1;if (backposition==0){alert(str1+'與'+str2+"衝突");}else{var patbackStr1 = str1.substring(str1.length-backposition,str1.length);var patbackStr2 = str2.substring(str2.length-backposition,str2.length);if(checkMarchQ(patbackStr1,patbackStr2)){alert(str1+'與'+str2+"衝突");}}}else{var patbeforeStr1 = str1.substring(0,position);var patbeforeStr2 = str2.substring(0,position);if(checkMarchQ(patbeforeStr1,patbeforeStr2)){//alert(str1+'與'+str2+"前半部分衝突");var backposition = strX.length-position-1;if (backposition==0){alert(str1+'與'+str2+"衝突");}else{var patbackStr1 = str1.substring(str1.length-backposition,str1.length);var patbackStr2 = str2.substring(str2.length-backposition,str2.length);if(checkMarchQ(patbackStr1,patbackStr2)){alert(str1+'與'+str2+"衝突");}}}}}}else{if(checkMarchQ(str1,str2)){alert(str1+'與'+str2+"衝突");}}}function checkMarchQ(str1,str2){var flagque = false;if(str1.length==str2.length){ //長度相同才有可能衝突for (var i=0 ;i<str1.length ;i++ ){if(str1.substr(i,1)!='?' && str2.substr(i,1)!='?'){if(str1.substr(i,1)!=str2.substr(i,1)){flagque = false;//表示不衝突break;}else{flagque = true;//表示衝突}}}}return flagque;}其中*最起碼為一個字符,以上程序並沒有對輸入的合法性進行驗證
查看更多JavaScript的語法,大家可以關注:《JavaScript 參考教程》、《JavaScript代碼風格指南》,也希望大家多多支持武林網。