正則基礎詳解

正則基礎詳解

/^開頭,結尾$/
* 匹配0次或屢次
+ 匹配1-n次
?匹配0次或1次;  當?跟在 * + {n}  {n,m} {n,} 後面時,匹配模式是非貪婪的
{n} 匹配肯定是n次,n非負數
.  匹配除了換行符\n之外的任何字符 包括點自己
(?:pattern) 小括號中的內容只匹配不捕獲
(?=pattern) 正向預查
(?!pattern) 負向預查
x|y 匹配x或者y
[xyz] 匹配xyz中任何一個
[^xyz]匹配未包含xyz的任意字符
[a-z]匹配指定範圍的字符
[^a-z]匹配不在a到z範圍內的任意字符

\b 匹配一個單詞的邊界 /er\b/ 能匹配 never 中的er  不能匹配 verb 中的er
\B 匹配非單詞邊界

\d  任意一個數字
\D  任意一個非數字

\w 匹配包括下劃線的任意字符  [a-zA-Z0-9]
\W 匹配任何非單詞字符

\s 空白字符
\S 非空白字符

\n 匹配任意一個換行字符
\r 回車

reg.exec(str) 返回一個數組
[  0: 匹配到的大正則,  1: 匹配到的小分組1,  2: 小分組2,  3: 匹配到的第一個字符的索引,  4:input:整個str  ]

reg.test(str) 返回true/false


   // 1.反向引用  /(捕獲的小分組)\數字/
    var reg=/(\w)(\w)\2\1/;// \2 第二個小分組匹配到的內容,\1 第一個小分組匹配到的內容
    var str="woow";
    console.log(reg.exec(str));// ["woow", "w", "o", index: 0, input: "woow"]
 //
 //  var reg = /(捕獲的小分組)\數字/;  \數字 表明的是反向引用,表示 第幾個括號內的子正則表達式所捕獲的內容,若是小分組加了(?:=pattern),那麼反向引用就無論用了。

    //2.小分組只匹配不捕獲  (?:=pattern)
    var reg1=/^(?:b|c).+/;
    var str1="bbs.www.baidu.cn";
    console.log(reg1.exec(str1));//  小分組只匹配不捕獲  (?:=pattern)
    //["bbs.www.baidu.cn", index: 0, input: "bbs.www.baidu.cn"]

    //3.正向預查(?=pattern) 要求匹配的時候知足括號中的條件
    //  反向預查 (?!pattern) 要求匹配的時候不知足括號中的條件
    //  小括號中的內容只匹配不捕獲
    var reg3=/cai(?=8)/;
    var str3="cai9";
    var str4="cai8";
    console.log(reg3.exec(str3));// null
    console.log(reg3.exec(str4));// ["cai", index: 0, input: "cai8"]
    var reg4=/zhufeng(?!shanshang)/;
    var string="zhufengshanshang";
    var string1="zhufengshanshang";
    console.log(reg4.exec(string));// null
    console.log(reg4.exec(string1));//  ["zhufeng", index: 0, input: "zhufengshanshang"]


    //4. 匹配元字符 * +  ? .  就是它們自己就有特殊意義的,須要轉義 \
    var reg5=/c\*/;
    var str05="c*";
    console.log(reg5.exec(str05));//["c*", index: 0, input: "c*"]

    //5.全局修飾符 ,g  不區分大小寫 i ,行首行尾 m

    //6.[abc] a或b或c 中的任意一個
    //  [^] 全部的非空字符 不是空格, ^在/^/是以...開頭的意思。在[^]是非的意思
    // [1-13] 從1到1或從1到3  不是1-13
    //[元字符] 表示元字符自己的意義,如 [.]表示點自己,不是 除了/n之外的任何字符

    //7. | 或者
    var reg06=/^(z|0).+/;
    var s="zhufeng";
    console.log(reg06.exec(s));// ["zhufeng", "z", index: 0, input: "zhufeng"]

    // 8.貪心匹配:在合法的狀況下,正則會盡可能多的去匹配字符,能匹配到4個,毫不會匹配3個
    //   非貪心匹配:?  如 {n,}?  *?  +?  {m,n}?

    //9.c{n} 匹配固定n個
    //  c{m,n} 匹配m到n個
    //  c{n,} 最少匹配n個,最多不限制

    //10.exec 與 全局修飾符g
    // 若是沒加全局修飾符g,執行多少次都同樣
    // 須要手動屢次執行,每次執行都會進行新的匹配, 改變了正則的lastIndex的值
    var reg07=/(\w)(\w)(\w)/;
    var s1="bbs.baidu.cn";
    var result1=reg07.exec(s1);
    var result2=reg07.exec(s1);
    console.log(result1);// 若是沒加全局修飾符g,執行多少次都同樣
    console.log(result2);//["bbs", "b", "b", "s", index: 0, input: "bbs.baidu.cn"]

    var reg08=/(\w)(\w)(\w)/g;//須要手動屢次執行 改變了正則的lastIndex的值
    var result3=reg08.exec(s1);
    var result4=reg08.exec(s1);
    console.log(result3);//["bbs", "b", "b", "s", index: 0, input: "bbs.baidu.cn"]
    console.log(result4);//["zhu", "z", "h", "u", index: 4, input: "bbs.baidu.cn"]

    //11.match 字符串類方法  str.match(reg)
    //設置了全局修飾符g,會自動進行屢次匹配,並把匹配到的結果放入到數組中,注意沒有index和input屬性
    //match在沒有分組的狀況下可以更快捷的把屢次匹配到的內容保存到數組中
    //exec正則類方法 reg.exec(str)  注意 兩者寫法徹底不同

    var reg09=/[bz]/;//不設置全局修飾符,結果和exec同樣
    var s3="bbs.baidu.cn";
    console.log(s3.match(reg09));//["b", index: 0, input: "bbs.baidu.cn"]

    var regg=/[bz]/g;//設置了全局修飾符,會自動進行屢次匹配,並把匹配到的結果放入到數組中,注意沒有index和input屬性
    var res=s3.match(regg);
    console.log(res);//["b", "b", "z"]
    //12.replace(參數1:正則表達式 被替換的內容,參數2:字符串/函數 用來替換第一個參數匹配到的內容)
    //字符串方法 查找並替換  ,返回值 一個新的字符串
    //若是reg中有全局標誌g,那麼將替換全部匹配到的子串,不然,它只替換第一個匹配子串
    //當第二個參數不是字符串,是函數的時候,每次匹配都調用該函數,將這個函數返回的字符串 做爲替換文本使用,這個函數自定義替換規則
    //當第二參數是函數時,不只自動執行此函數,還要給這個函數傳3個參數
    //1.當正則沒有分組時,傳進去的第一個實參是正則捕獲到的內容,第二個參數是捕獲到的內容在原字符串中的索引位置,第三個參數是原字符串
    //2.當正則有分組的時候,第一個參數是大正則查找到的內容,後面依次是子正則查找到的內容
    //3.傳完查找到的內容以後,再把總正則查找到的內容在原字符串中的索引傳進,最後傳入原字符串
    var ostring="XaZZcUdFe";
    var oreg=/[a-z]/g;
    ostring=ostring.replace(oreg,function () {
      return arguments[0]+"("+arguments[1]+")";
    });
    console.log(ostring);// Xa(1)ZZc(4)Ud(6)Fe(8)
    //不加()小分組,arguments:[ 0:匹配到的字符,1:查找到的內容在str中的索引,2:原字符串 ]
    var ostr="456a89b72cs";
    var oreg11=/(\d)(\d)/g;
    ostr=ostr.replace(oreg11,function () {
      return  Number(arguments[1])+Number(arguments[2]);
    });
    console.log(ostr);//96a17b9cs

    var astr="a1b2c3d4";
    var rr=/[a-z]/g;
    astr=astr.replace(rr,function (result,position,string) {
      return `在${position}的位置找到了${result},原字符串是${string};`;
    });
    console.log(astr);//在0的位置找到了a,原字符串是a1b2c3d4;
    // 在2的位置找到了b,原字符串是a1b2c3d4;2在4的位置找到了c,原字符串是a1b2c3d4;3在6的位置找到了d,原字符串是a1b2c3d4;4

str.search(reg)
str.split(reg,"")

未完待續。。。。正則表達式

相關文章
相關標籤/搜索