正则基础介绍
文章目錄
- 正則表達式
- test
- match
- replace
- 第二個參數是函數時:
- replace的經典用法
- exec
- 元字符
- {} 量詞
- 標識符
- 起始符和結束符
- 貪婪和非貪婪
- () 子集
- [] 范圍詞
- 非
- | 或者
- 匹配中文
- 斷言
- 先行斷言、正向肯定預測(?=模式)
- 正向否定預測(?!模式)
- 反向肯定預測(?<=模式)
- 反向否定預測(?<!模式)
正則表達式
//regular Expression //其實就是一套規則,一般用來處理字符串的查詢和替換工作。 寫法:1.字面量/正則規則/ 2.使用構造函數new RegExp(字符串的規則) //test
reg.test(str) //匹配成功返回true,反正false //str 源字符串match
// str.match(需要匹配的規則/子字符串) * 這是字符串的方法 * 會返回一個數組,包含著匹配內容,如果不成功返回null;/*在使用正則作為規則時:正則沒有標識符g:返回第一次匹配成功的結果,同時index屬性返回下標,input返回目標字符串正則有標識符g:返回一個數組,數組里都是匹配成功的結果(字符串),沒有index和input*/replace
用于對字符串進行替換
該方法是字符串的方法,接收兩個參數第一個匹配的規則(可以是字符串也可以是正則表達式),第二個可以是字符串,也可以是函數,函數必須有返回值作為替換內容。
大佬講重點,快拿小本本記下來
第二個參數是函數時:
1.如果正則沒有子集:
//此時函數有3個形參,第一個:匹配的內容;第二個:下標;第三個:源字符串 //例如: var str = "XX我愛你,XX你咋帥呢?XX你有對象么?如果有,介意再多一個么?" var reg = /XX/g; str.replace(reg,function (a,b,c) {console.log(a,b,c) }) /* XX 0 XX我愛你,XX你咋帥呢?XX你有對象么?如果有,介意再多一個么? XX 6 XX我愛你,XX你咋帥呢?XX你有對象么?如果有,介意再多一個么? XX 13 XX我愛你,XX你咋帥呢?XX你有對象么?如果有,介意再多一個么? */2.如果正則有子集:
/*此時函數有n(子集個數+3)個形參, 第一個:匹配的內容; 第二個:第一個子集(如果有多個子集就往后順延);//比如有兩個子集,則第三個是第二個子集,第四個是下標... 第三個:下標; 第四個:源字符串 */ var str = "XX我愛你,XX你咋帥呢?XX你有對象么?如果有,介意再多一個么?" var reg = /(XX)+/g; str.replace(reg,function (a,b,c,d) {console.log(a,b,c,d) }) /* XX XX 0 XX我愛你,XX你咋帥呢?XX你有對象么?如果有,介意再多一個么? XX XX 6 XX我愛你,XX你咋帥呢?XX你有對象么?如果有,介意再多一個么? XX XX 13 XX我愛你,XX你咋帥呢?XX你有對象么?如果有,介意再多一個么? */replace的經典用法
#這是replace的一個經典用法,[好好看好好學] //交換字符串里東西的位置 var str = "xiaoliu 小劉"; //交換xiaoliu和小劉的位置 var reg = /(\w)+\s(小劉)/g; //此時正則有兩個子集 console.log(str.replace(reg,"$2 $1")) /*此時的輸出結果為:風嶼 fengyu所見即所得:第二個參數是字符串時,如果正則有子集,字符串里$1代表第一個子集,$2代表第二個...... */exec
#此方法用處不是很大,并且坑很多 //此方法跟迭代器有點類似,執行結果是按序輸出 var str = "abc"; var reg = /\w/g; console.log(reg.exec(str)) // ["a", index: 0, input: "abc"] console.log(reg.exec(str)) // ["b", index: 1, input: "abc"] console.log(reg.exec(str)) // ["c", index: 2, input: "abc"] console.log(reg.exec(str)) // null //然后再調用一次 console.log(reg.exec(str)) // ["a", index: 0, input: "abc"]元字符
//轉義符 : \ 對后面的字符進行轉義//特殊字符正斜杠:/ 反斜杠: \(轉義)換行符: Linux(\n) MacOS(類Unix)(\r) windows (\n\r還有可能是\n)\d 數字的是意思 0~9\D 非數字\s 空格\S 非空格\w 字符(數字、字母、_)\W 非字符(除了\w之外的所有東西 ). 匹配任意字符,但是不包括(\n \r)\b 獨立部分(單詞邊界 單詞起始 結束 連詞符(除了\w之外的都屬于連詞符) )\B 非獨立部分{} 量詞
// 寫法:{} 量詞的每種次數之間都是或者關系 // 量詞管轄前一個字符,除外() {0,8} 最少出現0次,最多只能出現8次 {2,5} 最少出現2次,最多出現5次//特殊的寫法: {0,1} 最少出現0次,最多出現1次。 可有可無簡寫為:? {0,} 最少出現0次,最多....... 0到正無窮簡寫為:* {1,} 最少出現1次,最..... 1到正無窮簡寫為:+標識符
//標識符 /規則/gim* g global 全局匹配* i ignore case 不區分大小寫* m multiline 換行匹配 (沒有卵用)起始符和結束符
起始符(行首) ^ //一行的開頭 終止符(行尾) $ //一行的結束貪婪和非貪婪
//貪婪和非貪婪:要在有量詞時才會存在。 #貪婪匹配* 直接寫量詞就是貪婪* 會優先從最高次開始匹配 #非貪婪匹配* 非貪婪是在量詞后面加 ?* 優先從最少次數開始匹配 //例如:var str = "AAAABBBBBCCCCC" var reg = /a{1,3}?/ig; //非貪婪 ["A", "A", "A", "A"] var reg = /a{1,3}/ig; //貪婪 ["AAA", "A"] console.log(str.match(reg))() 子集
# () 子集//子集:被括號括起來的屬于一個整體//例如: var str = "ABabbabbb" var reg = /(ab)+/ig; // ["ABab", "ab"] 有子集 var reg = /ab+/ig; // ["AB", "abb", "abbb"] 沒有子集 console.log(str.match(reg))[] 范圍詞
# [] 范圍詞// 里面的所有字符都是 或者 關系var str = "abcd64efd_gsah15dgsa_dgsha89gdjgABCDEFG_"var reg = /[AZa-z0-9]+/g; //[a-z] 等價于 a|b|c|d|e......|zconsole.log(str.match(reg))非
# 非就是取反。 let s = '2020-12-04 20:54:30'let reg = /[^-\s:]+/glet res = s.match(reg)console.log(res) // ["2020", "12", "04", "20", "54", "30"]| 或者
# | 或者var str = "abdsadabtyebwaqi" var reg = /a|b/g; //["a", "b", "a", "a", "b", "b", "a"] var reg = /ab/g; //["ab", "ab"] console.log(str.match(reg))匹配中文
#所有的中文都在這個范圍 \u4e00-\u9fa5斷言
(?:模式) 非捕獲匹配
子集 默認為捕獲匹配
先行斷言、正向肯定預測(?=模式)
# 固定匹配右邊 隨機匹配左邊 let str1 = 'xiaozhang123' let str2 = 'xiaozhang456'let reg = /xiaozhang(?=123)/ reg.test(str1) // true reg.test(str2) // false正向否定預測(?!模式)
# 固定不匹配右邊 隨機匹配左邊 let str1 = 'xiaozhang123' let str2 = 'xiaozhang456'let reg = /xiaozhang(?!123)/ reg.test(str1) // false reg.test(str2) // true反向肯定預測(?<=模式)
# 固定匹配左邊 隨機匹配右邊 let str1 = '123xiaozhang' let str2 = '456xiaozhang'let reg = /(?<=123)xiaozhang/ reg.test(str1) // true reg.test(str2) // false反向否定預測(?<!模式)
# 固定不匹配左邊 隨機匹配右邊 let str1 = '123xiaozhang' let str2 = '456xiaozhang'let reg = /(?<!123)xiaozhang/ reg.test(str1) // false reg.test(str2) // true總結
- 上一篇: HTTP 401和403区别
- 下一篇: 纷享销客罗旭对话元气森林黄晓枫:零售数字