為啥要用正則?!我最開始也不是很理解,說實話也懶得學,但看看下面的if else 估計各位也是夠了,雖然正則難學,難記總歸類似這種操作應該是用正則去做的。下面我用傳統字符串操作做一個取數字的函數。
//函數findNum的任務 是找到字符串"1212 21 009 090 00"並打印出來 var str="1212dasdad21jif009fajf090adv00"; function findNum(str){ var arr=[];//空數組一會兒存放變量; for(var i=0;i<str.length;i++){ //遍歷字符串的每一位 var oStr=str.charAt(i); //取0-9的范圍 超出范圍則不是數字 if(oStr<='9'&&oStr>='0'){ //數組push方法添加 arr.push(oStr) } } //返回結果 return arr; } console.log(findNum(str)); /*打印結果 為["1", "2", "1", "2", "2", "1", "0", "0", "9", "0", "9", "0", "0", "0"] 可以看到這並不是我們想要的結果 */
修改函數后
//增加一個新的變量tmp var str="1212dasdad21jif009fajf090adv00"; function findNum(str){ var arr=[]; var tmp=''; for(var i=0;i<str.length;i++){ var oStr=str.charAt(i); if(oStr<='9'&&oStr>='0'){ //是數字執行下邊操作 tmp+=oStr; }else{ //非數字執行下面操作 if(tmp){ arr.push(tmp); tmp=''; //清空變量,為遍歷下面的字符串使用; } } } //返回結果 return arr; } console.log(findNum(str)); /*打印結果 為 ["1212", "21", "009", "090"] 現在好多了,但是我們要找的結果應該是 ["1212", "21", "009", "090","00"] 現在找到的是 ["1212", "21", "009", "090"] 還少了一位 */
再次修改函數:
//在循環結束后再次增加if else 判斷 var str="1212dasdad21jif009fajf090adv00"; function findNum(str){ var arr=[]; var tmp=''; for(var i=0;i<str.length;i++){ var oStr=str.charAt(i); if(oStr<='9'&&oStr>='0'){ //是數字執行下邊操作 tmp+=oStr; }else{ //非數字執行下面操作 if(tmp){ arr.push(tmp); tmp=''; //清空變量,為遍歷下面的字符串使用; } } } //循環結束之后再次判斷,因為末尾是數字的話,循環結束后只會走是數字的操作,而添加到數組里的這個動作就沒有機會走了。 if(tmp){ arr.push(tmp); tmp=''; //最后一次清空變量 } //返回結果 return arr; } console.log(findNum(str)); /*打印結果 為["1212", "21", "009", "090", "00"] 現在是我們想要的結果了 */
以上經過2次三番的折騰終於達到我們想要的目的了,這個找數字的的函數還好,要是復雜點的匹配,曾加一推if else,想想也是夠了!我開始學習正則了,不再偷懶了(⊙o⊙)…