《javascript進階程式設計》學習筆記(九):Regex

來源:互聯網
上載者:User
 Regex的用法十分複雜,完全可以用一本書來講述。這裡只記錄一些簡單的常用的用法。

1.js裡面通過RegExp類來實現Regex的。

    var reCat = new RegExp("cat");     //匹配串中第一個"cat"
    var reCat = new RegExp("cat","g"); //匹配串中所有的"cat","g"是global的意思
    var reCat = new RegExp("cat","gi");  //匹配串中所有的"cat",不區分大訊息,"i"是insensitive的縮寫
    var reCat = /cat/gi;        //perl風格

2.RegExp的方法

    (1)test() 判斷是否匹配,返回 true 或者 false
    var sTomatch ="cat";
    var reCat = /cat/;
    alert(reCat.test(sTomatch));//outputs true

    (2)exec() 返回一個數組,數組中的第一個條目是第一個匹配
    var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
    var reAt = /at/;
    var arrMatches = reAt.exec(sTomatch);
    alert(arrMatches.toString()); //outputs 'at'

3.String對象對Regex的支援

    (1)match()方法
    var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
    var reAt = /at/gi;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches.toString()); //outputs 'at,at, At ,aT ,aT ,at';

    (2)replace()方法
    var sToChange = "this red paper is not very red";
    alert(sToChange.replace("red","blue"));//只替換第一個"red",outputs "this blue paper is not very red"

    要想全部替換,如下
    var sToChange = "this red paper is not very red";
    var reRed = /red/gi;
    alert(sToChange.replace(reRed,"blue"));

    (3)split()方法
    var sColor = "red,blue,yellow,green";
    var reCom = /\,/ ;  //因為","是Regex的元字元,所以用"\"來轉義
    var arrColors = sColor.split(reCom);

    上面方法的效果等同於
    var sColor = "red,blue,yellow,green";
    var arrColors = sColor.split(",");

4.簡單模式
    (1)元字元。
    Regex的所有元字元如下:
    ( [ { \ ^ $ | ) ? * + .
    任何Regex要使用元字元,都必須轉義:
    var reTest = /\?/ ;
    或者:
    var reTest = new RegExp("\\?"); //注意:是兩個反斜線,為了避免js像處理 \n 一樣處理 \? ,必須雙重轉義。
   
    如果刪除字串中的所有分行符號,如下:
    var sNewStr = sOldStr.replace(/\n/g,"");
   
    (2)字元類:
    <1>.簡單類 使用[abc] ,表示匹配中括弧內的字元
    var reTest = /[abc]at/gi; //匹配串中'at'字元前是'a'或者'b'或者'c'
   
    例如:
    var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
    var reAt = /[abc]at/gi;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches); //outputs 'bat, Cat, baT, cat';
   
    <2>.負向類 使用[^abc],表示不匹配中括弧內的字元
    var reTest = /[abc]at/gi; //匹配串中'at'字元前不是'a'不是'b'不是'c'
   
    例如:
    var sTomatch = "a bat, a Cat, a fAt baT, a faT cat";
    var reAt = /[^abc]at/gi;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches); //outputs 'fAt,faT';
   
    <3>.範圍類 [a-z] ,表示匹配a到z範圍之間的
    例如:
    var sTomatch = "num1,num2,num3,num4,num5";
    var reAt = /num[1-3]/g;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches); //outputs 'num1,num2,num3';
   
    <4>.組合類別 [a-z1-4\n] 標識匹配所有a~z,1~4 以及一個分行符號
    例如:
    var sTomatch = "num1,numanuma,numb,num4,num5,num?num3numt,num9";
    var reAt = /num[1-3a-m\n]/g;
    var arrMatches = sTomatch.match(reAt);
    alert(arrMatches); //outputs 'num1,numa,numa,numb,num?,num3';
    <5>.預定義類 由於經常用到一些模式,Regex預定義了一些常用匹配:如下:
   
   

代碼 等同於 匹配
. [^\n\r] 除了換行和斷行符號之外的任一字元
\d [0-9] 數字
\D [^0-9] 非數字
\s [ \r\n\x0B\f\r] 空白字元
\S [^\r\n\x0B\f\r] 非空白字元
\w [a-zA-Z_0-9] 單詞字元(所有的字母、數字、底線)
\W [^a-zA-Z_0-9] 非單詞字元

   
    <6>.簡單量詞,如下表:
   

代碼 描述
出現零次或一次
* 出現零次或多次(任意次)
+ 出現一次或多次(至少出現一次)
{n} 一定出現n次
{n,m} 至少出現n次,但不超過m次
{n,} 至少出現n次

    例如,想匹配單詞bread,red或read:
    var reB = /b?rea?d/;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.