正则基础详解
正則基礎詳解
/^開頭,結尾$/ * 匹配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.zhufengpeixun.cn";console.log(reg1.exec(str1));// 小分組只匹配不捕獲 (?:=pattern)//["bbs.www.zhufengpeixun.cn", index: 0, input: "bbs.www.zhufengpeixun.cn"]//3.正向預查(?=pattern) 要求匹配的時候滿足括號中的條件// 反向預查 (?!pattern) 要求匹配的時候不滿足括號中的條件// 小括號中的內容只匹配不捕獲var reg3=/cai(?=8)/;var str3="cai9";var str4="cai8";console.log(reg3.exec(str3));// nullconsole.log(reg3.exec(str4));// ["cai", index: 0, input: "cai8"]var reg4=/zhufeng(?!peixun)/;var string="zhufengpeixun";var string1="zhufengketang";console.log(reg4.exec(string));// nullconsole.log(reg4.exec(string1));// ["zhufeng", index: 0, input: "zhufengketang"]//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.zhufengpeixun.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.zhufengpeixun.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.zhufengpeixun.cn"]console.log(result4);//["zhu", "z", "h", "u", index: 4, input: "bbs.zhufengpeixun.cn"]//11.match 字符串類方法 str.match(reg)//設置了全局修飾符g,會自動進行多次匹配,并把匹配到的結果放入到數組中,注意沒有index和input屬性//match在沒有分組的情況下能夠更快捷的把多次匹配到的內容保存到數組中//exec正則類方法 reg.exec(str) 注意 二者寫法完全不一樣var reg09=/[bz]/;//不設置全局修飾符,結果和exec一樣var s3="bbs.zhufengpeixun.cn";console.log(s3.match(reg09));//["b", index: 0, input: "bbs.zhufengpeixun.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);//96a17b9csvar 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;4str.search(reg) str.split(reg,"")未完待續。。。。
總結
- 上一篇: (二)微服务分布式云架构 - sprin
- 下一篇: 听说你的项目中仅这些资源就卡成了翔?看看