JavaScript中兩個(gè)字符串的匹配
工作中遇到一個(gè)問題,兩個(gè)字符串匹配,要求:每個(gè)字符串中最多含有一個(gè)*,?可以無限多個(gè)
*代表一個(gè)任意長度的字符串,而?則代表一個(gè)字符
要求可以提示出兩個(gè)沖突
<input type="text" id="str2"><br>
<input type="button" onclick="checkMarchX()" value="CHECK">
用JavaScript實(shí)現(xiàn)代碼如下:
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;//success if(position!=0) { var patbeforeStr1 = str1.substring(0,position); var patbeforeStr2 = str2.substring(0,position); if(checkMarchQ(patbeforeStr1,patbeforeStr2)) { //alert(str1+'與'+str2+"前半部分沖突"); //然后對應(yīng)后半部分進(jìn)行測試 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))//有且只有一個(gè)字符串含有* { 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; }
其中*最起碼為一個(gè)字符,以上程序并沒有對輸入的合法性進(jìn)行驗(yàn)證
查看更多JavaScript的語法,大家可以關(guān)注:《JavaScript 參考教程》、《JavaScript代碼風(fēng)格指南》,也希望大家多多支持腳本之家。
相關(guān)文章
JS實(shí)現(xiàn)滾動(dòng)條觸底加載更多
這篇文章主要介紹了JS滾動(dòng)條觸底加載更多,需要的朋友可以參考下2019-09-09JS實(shí)現(xiàn)讓網(wǎng)頁背景圖片斜向移動(dòng)的方法
這篇文章主要介紹了JS實(shí)現(xiàn)讓網(wǎng)頁背景圖片斜向移動(dòng)的方法,涉及javascript操作背景圖片特效的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02JavaScript學(xué)習(xí)總結(jié)之JS、AJAX應(yīng)用
這篇文章主要介紹了JavaScript學(xué)習(xí)總結(jié)JS AJAX應(yīng)用 的相關(guān)資料,需要的朋友可以參考下2016-01-01JS實(shí)現(xiàn)定時(shí)頁面彈出類似QQ新聞的提示框
類似QQ新聞的提示框要求頁面每隔半小時(shí)彈出一次提示消息,下面有個(gè)不錯(cuò)的實(shí)現(xiàn)方法,感興趣的朋友可以參考下2013-11-11基于JavaScript實(shí)現(xiàn)控制下拉列表
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)控制下拉列表,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05