如下:“23nr qreq2 34fq4 4454gsr 45”
【將這一串字符中的數字挑出來,當然人家作伴的不能被分開】。
一、普通方法:
1 <script type="text/javascript"> 2 var str = "23nr qreq2 34fq4 4454gsr 45"; 3 var tep = ""; 4 var arr= []; 5 for(var i=0;i<str.length;i++){ 6 if(str.charAt(i)> 0 && str.charAt(i)< 9){ 7 tep += str[i]; 8 }else{ 9 if(tep){ 10 arr.push(tep); 11 tep = ""; 12 } 13 } 14 } 15 if(tep){ 16 arr.push(tep); 17 tep=""; 18 } 19 alert(arr); 20 </script>
知識點:for遍歷,if判斷,字符串length屬性+charAt()方法,數組push()方法,
注意關鍵點:
var tep = "";//用來裝正在過安檢的字符
var arr= [];//用來裝所有通過安檢的符合要求的妃子去見皇上。
for(var i=0;i<str.length;i++){//遍歷是方法
if(str.charAt(i)> 0 && str.charAt(i)< 9){//判斷下標第i位這個字符,若這個字符是一個數字
//tep = str[i];//這里遇到問題,第i個字符串怎么表示,和數組的表示方法一樣嗎?答案是yes
tep += str[i];//一定要加等於,把他累計丟進去,不然你就是狗熊掰棒子,掰第二個時,第一個就被替換掉沒了。最后遍歷出來的就是3,2,4,4,5,是這五組數字的最后一個字符,說明前面的數字都被替換掉了。
}else{//遇到字符不是一個數字的時候,再把tep里面存放的正在過安檢的人push給arr,這樣,連在一起的兩個字符就還可以在一起了,不然你查出來一個push一個,差一個過一個,那人家之前兩個數字做着伴的不就被分開了。
if(tep){//如果tep里有東西,就是說,這個字符不是0-9,但是tep又不是空,有東西的情況下,
arr.push(tep);
tep = "";//把復合的數據備份到arr后,將tep籃子清空,接着去裝別人
}
}
}
//防止到了最后一個字符還是數字所以循環的外邊,最后還是要再push+清空一下,這樣就算字符串遍理完了,你還是會有最后一個數字字符在上面的for遍歷中,因為沒有遇到else的情況,就不會被push到arr中,你可以嘗試刪除下面的if語句,就知道他的作用了。這個字符最后是45,遍歷完了依舊符合if(str.charAt(i)> 0 && str.charAt(i)< 9)的條件,不會執行else。
if(tep){
arr.push(tep);
tep="";
}
二、正則RegExp【regular expression】
1 <script type="text/javascript"> 2 var str2 = "23nr qreq2 34fq4 4454gsr 45"; 3 var re = /\d+/g; 4 document.write("<br/>"+str2.match(re)) 5 </script>
相當明顯,代碼少了N行。
知識點:RegExp正則表達式,match()方法;
關鍵點:
match() 方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配。該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。
比較:search()和charAt(),這倆貨返回的是字符串的位置下標,是一個數字。
var re = new RegExp('\d','g');//創建 RegExp 對象的js風格的怎么寫?
1:\d:表示查找一個0-9的數字,
引申:\D:表示一個非數字的字符。
2:+:表示若干個,可以只找到一個,也可以找到多個。如果不加這個,在這個項目中,他就會只找一個一個一個一個的找出來,類似第一種方法中,沒用+=的情況,這么說,+又有累積的功能了,加上“算加法”和“連接符”的作用,他就三個功能了。
3:g:global的意思,全局查找,就是說,在所有字符串中查找。如果不加這個,他就找到第一個2了。后邊就都不找了,類似於第一種方法中,不用for循環遍歷是一樣的。
PS:來自騰訊課堂筆記:https://ke.qq.com/webcourse/index.html#course_id=152997&term_id=100174752&taid=801037170660773&vid=y1412sc0r8c
