很長時間沒看正則表達式了,碰巧今天用到,溫故知新了一把,這裡記錄下來,分享給大家,都是些基礎的知識,重點給大家講解的是正則表達式中4種常用的方法,50% 的舉一反三練習中的原創。
正則表達式的好處到底在哪裡呢,下面我們先進行個了解:
我們用js中處理字符串的方法,寫出取出字符串中數字的函數:
?
1 2 3 4 5 6 7 8 9 10 11 var str='dgh6a567sdo23ujaloo932'; function getNumber(obj){ var arr=[]; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ arr.push(obj.charAt(i)); } } return arr; }; console.log(getNumber(str)); //["6", "5", "6", "7", "2", "3", "9", "3", "2"]上面的方法我們取出了字符串中的數字,但是我們不滿意,我們需要的是['6','567','23','932']的形式,對函數進行改造:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 function getNumber(obj){ var arr=[]; var temp=''; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ temp+=obj.charAt(i);//現將相鄰的數字連接起來 } else{ //每當連接的數字斷開時,就在這執行 if (temp) { arr.push(temp); temp=''; } }; } if (temp) { //這裡的作用是為了顯示最後數字的,原因不想解釋 arr.push(temp); temp=''; } return arr; };那我們用正則表達式的方式來解決這個函數實現的功能:
?
1 2 3 4 5 6 function getNumber2(obj){ var arr=[]; var re=/d+/g; arr.push(obj.match(re)); return arr; };完整的看看程序的運行結果吧:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 <!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6a567sdo23ujaloo932'; /*function getNumber(obj){ var arr=[]; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ arr.push(obj.charAt(i)); } } return arr; };*/ function getNumber(obj){ var arr=[]; var temp=''; for (var i = 0; i < obj.length; i++) { if (obj.charAt(i)>='0'&&obj.charAt(i)<='9'){ temp+=obj.charAt(i);//現將相鄰的數字連接起來 } else{ //每當連接的數字斷開時,就在這執行 if (temp) { arr.push(temp); temp=''; } }; } if (temp) { //這裡的作用是為了顯示最後數字的,原因不想解釋 arr.push(temp); temp=''; } return arr; }; function getNumber2(obj){ var arr=[]; var re=/d+/g; arr.push(obj.match(re)); return arr; }; console.log(getNumber(str)); console.log(getNumber2(str)); }; </script> <body> </body> </html>從上面的例子我們可以看出來,正則表達式的方法有著同樣的效果,但是代碼更加簡短,更加高效,這就是正則的好處啊
正則是為了更高效的處理字符串而產生的,和字符串處理方法一樣,只是更加高效、簡潔(正則只可以處理字符串)
下面我們來系統的學習一下,正則的幾個常用的方法:
在這之前說一下正則的寫法,正則和其他對象array()、object()、Date()等都一樣,都有初始化的方式
var re=/這裡面要寫匹配的東西,不寫的話就是注視符號了/; //這樣的就是正則對象的簡單創建,後面文章我都是直接用它來代替的
var re=new RegExp(); //這樣的創建方式也可以的,大家懂得,只是和簡寫不同的是參數傳遞有點不一樣
(1)test
含義:正則去匹配字符串,當匹配成功返回true,反之,返回false;
語法:re.test(字符串);
先說點轉義字符吧 :
/s空格 /S非空格 /d數字 /D非數字 /w字符(字母、數字、下劃線) /W非字符
舉個例子:判斷一個字符串是否都是數字
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6a567sdo23ujaloo932'; var str2='123456'; function allNumber(obj){ var re=/D/;//定義正則對象匹配非數字,只要有不是數字的就是匹配結束返回結果 if (re.test(obj)) { alert('不全是數字'); } else{ alert('全是數字'); }; }; allNumber(str); allNumber(str2); }; </script> <body> </body> </html>(2)search
含義:正則去匹配字符串,當匹配成功返回匹配成功的位置,反之,返回-1;和字符串處理方法中的indexof()功能一樣
語法:字符串.search(re);
[