JS-提取字符串—>>普通方法VS正則表達式


如下:“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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM