javascriptRegex基礎知識入門

來源:互聯網
上載者:User

   很長時間沒看Regex了,碰巧今天用到,溫故知新了一把,這裡記錄下來,分享給大家,都是些基礎的知識,重點給大家講解的是Regex中4種常用的方法,50% 的舉一反三練習中的原創。

  Regex的好處到底在哪裡呢,下面我們先進行個瞭解:

  我們用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; };

  那我們用Regex的方式來解決這個函數實現的功能:

  ?

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>

  從上面的例子我們可以看出來,Regex的方法有著同樣的效果,但是代碼更加簡短,更加高效,這就是正則的好處啊

  正則是為了更高效的處理字串而產生的,和字串處理方法一樣,只是更加高效、簡潔(正則只可以處理字串)

  下面我們來系統的學習一下,正則的幾個常用的方法:

  在這之前說一下正則的寫法,正則和其他對象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);

  [color=Red]注意:正則中預設是區分大小寫,要想讓其不區分大小寫就是加標識i;[/color]

  例子,不區分大小寫去正則匹配字串中某個字元

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6b567sdo23ujaloo932'; function searchStr(obj){ var re=/B/i;//定義正則對象匹配b字元,不區分大小寫 alert(obj.search(re)); }; searchStr(str); }; </script> <body> </body> </html>

  (3)match

  含義:正則去匹配字串,當匹配成功返回匹配成功的數組,反之,返回Null

  文法:字串.match(re);

  [color=Red]注意:正則中預設是只要是匹配成功就立刻結束返回相應的值,不會繼續匹配。若想尋找全部就需要加表示g(全域匹配)[/color]

  例子:匹配字串中的連續數字並將其存入一個數組中(連續的數字作為數組用的一項)

  程式中的“+”是匹配至少出現一次,為什麼要這樣做呢?

  前面我們提過“正則中預設是只要是匹配成功就立刻結束返回相應的值”,那麼在字串中匹配到一個數字時就會結束,將一個數字返回數組,這時候我們需要的是用g來讓它匹配每一個元素。

  有沒有發現連續的數字沒有確定的個數,用“+”就可以滿足動態數字個數。

  ?

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 <!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='dgh6b567sdo23ujaloo932'; function searchStr1(obj){ var re=/d/; return obj.match(re); }; function searchStr2(obj){ var re=/d/g; return obj.match(re); }; function searchStr3(obj){ var re=/dd/g;//全域匹配2位元 return obj.match(re); }; function searchStr4(obj){ var re=/d+/g; return obj.match(re); }; console.log(searchStr1(str)); console.log(searchStr2(str)); console.log(searchStr3(str)); console.log(searchStr4(str));   }; </script> <body> </body> </html>

  (4)replace

  含義:正則去匹配字串,當匹配成功的字串被新的字串所替代

  文法:字串.replace(re);

  例子:將字串中的所有的a都替換成b

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <!DOCTYPE> <html> <head> <meta charset='utf-8'> <title></title> </head> <script type="text/javascript"> window.onload=function(){ var str='daah6b5a7sdo23ujaloo932'; function replaceStr(obj){ var re=/a/g; //全域匹配a return obj.replace(re,'b'); }; console.log(replaceStr(str)); }; </script> <body> </body> </html>

  暫時寫到這裡後續跟新。。。

  以上所述就是本文的全部內容了,希望大家能夠喜歡。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.