正則基礎詳解

2021-09-14 02:50:29 字數 4878 閱讀 7146

/^開頭,結尾$/

* 匹配0次或多次

+ 匹配1-n次

?匹配0次或1次; 當?跟在 * + 後面時,匹配模式是非貪婪的

匹配確定是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));// null

console.log(reg3.exec(str4));// ["cai", index: 0, input: "cai8"]

var reg4=/zhufeng(?!peixun)/;

var string="zhufengpeixun";

var string1="zhufengketang";

console.log(reg4.exec(string));// null

console.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個

// c 匹配m到n個

// c 最少匹配n個,最多不限制

與 全域性修飾符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"]

字串類方法 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"]

引數1:正規表示式 被替換的內容,引數2:字串/函式 用來替換第乙個引數匹配到的內容)

//字串方法 查詢並替換 ,返回值 乙個新的字串

//如果reg中有全域性標誌g,那麼將替換所有匹配到的子串,否則,它只替換第乙個匹配子串

//當第二個引數不是字串,是函式的時候,每次匹配都呼叫該函式,將這個函式返回的字串 作為替換文字使用,這個函式自定義替換規則

//當第二引數是函式時,不僅自動執行此函式,還要給這個函式傳3個引數

//1.當正則沒有分組時,傳進去的第乙個實參是正則捕獲到的內容,第二個引數是捕獲到的內容在原字串中的索引位置,第三個引數是原字串

//2.當正則有分組的時候,第乙個引數是大正則查詢到的內容,後面依次是子正則查詢到的內容

//3.傳完查詢到的內容之後,再把總正則查詢到的內容在原字串中的索引傳進,最後傳入原字串

var ostring="xazzcudfe";

var oreg=/[a-z]/g;

ostring=ostring.replace(oreg,function () );

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 () );

console.log(ostr);//96a17b9cs

var astr="a1b2c3d4";

var rr=/[a-z]/g;

astr=astr.replace(rr,function (result,position,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,"")

未完待續。。。。

JS 正則詳解

1.正則匹配規則 字面量字串 dog 匹配 dog 元字元 點字元 匹配 除回車 r 換行 n 行分隔符 u2028 和段分隔符 u2029 以外的所有字元。位置字元 表示字串開始 結束的位置 選擇符 表示或關係,即cat dog表示匹配cat或dog。選擇符會包括它前後的多個字元,比如 ab cd...

爬蟲基礎 正則基礎

re模組是python 中專門處理正則相關的模組 下面專門介紹一下正規表示式。相關的正則測試 推薦乙個。re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match pattern,string,falg 0 import re co...

關於正規表示式的基礎詳解

正規表示式規則 要滿足的模板 和位置無關 d 代 表所有的數字 d 代表所有的非數字字元 s 代表空格 s 代表所有得到非空格字元 w 代表所有的單個字元 a b,c,1,2,a,b,w 代表所有的非單個字元 量次 想要出現的次數 1 指定次數 代表前面的表示式出現的次數為n次.代表前面的表示式出現...