一.正則表達式的作用
規律數據的替換或原內容位置變換,如前端的模板技術,使用指定的標簽把數據直接渲染在頁面中
二.正則表達式的語法
1.元字符.單個字符
1 .小數點 匹配任意 單個字符 不包括換行符 2 \w 匹配任意 單個字母 或 單個數字或 單個下划線(對應的英文單詞word) 3 \W 匹配任意 單個非字母 或單個非數字 或單個非下划線(與\w相反) 4 \d 匹配任意 單個數字 相當於[0-9](對應的英文單詞digital) 5 \D 匹配任意 不是數字的單個字符(與\d相反) 6 \s 匹配任意 一個不可見字符,等價於[\f\n\r\t\v](對應的英文單詞space) 7 \S 匹配任意 一個可見的字符(與\s相反) 8 ^ 匹配開始位置 9 $ 匹配結束位置
2.量詞,表示數量
1 * 等價於{0,} 2 ? 等價於{0,1} 3 + 等價於{1,} 4 {n} 重復n次 5 {n,} 重復>=n次 6 {n,m} 重復n到m次
3.分支&字符集
1 (a|b|c) 匹配abc中的任何一個 2 [abc] ===[a-c] 一個字符集合。匹配方括號的中任意字符 3 [^abc] ===[^a-c] 一個反向字符集。匹配任何沒有包含在方括號中的字符 4 由最不優化到最優化(a|b|c)=[abc]=[a-c
4.分組與引用
1 分組 :以括號進行分組 2 用括號括住的部分(pattern) 匹配pattern並獲取這一匹配。該匹配內容存放在相應的內存數組中, 3 引用:一個括號對應的項以$1-$9引用,以括號的順序從$1開始,最多可以捕獲9個 4 如/(\d{4})-(\d{2})-(\d{2})/ 假設匹配2018-03-17。那么 $1對應的內容是2018 5 $2對應的內容是03 6 $3對應的內容是17
5.轉義
1 使用\符合進行轉義,轉義的作用是把原在正則中的作用 2 還原成本來這個字符的功能 3 如:轉義小數點 不是匹配任意單個字符而僅僅匹配小數點 4 \. 5 正則中有特殊含義的字符如何恰巧就要匹配這個字符就需要轉義操作 6
6.惰性&貪婪
1 * 貪婪匹配 匹配更多的項 效率低
2 ? 惰性匹配 匹配更少的項 效率高些
7.零度斷言
1 用於查找在某些內容(但並不包括這些內容)之前或之后的東西, 2 也就是說它們像\b,^,$那樣用於指定一個位置,這個位置應該滿足一定的條件(即斷言), 真假判斷 3 有正向真斷言:(?=pattern) 4 反向真斷言:(?<=pattern) 真斷言使用=,假斷言使用! 5 正向假斷言: (?!pattern) 6 反向假斷言: (?<!pattern)
8.修飾符&標志
1 g → global 全文匹配 2 i → ignoreCase 忽略大小寫 3 m → multiline 多行匹配
9.前端的使用方法
1 exec 一個在字符串中執行查找匹配的RegExp方法,它返回一個數組(未匹配到則返回null)。 2 test 一個在字符串中測試是否匹配的RegExp方法,它返回true或false。 3 match 一個在字符串中執行查找匹配的String方法,它返回一個數組或者在未匹配到時返回null。 4 search 一個在字符串中測試匹配的String方法,它返回匹配到的位置索引,或者在失敗時返回-1。 5 replace 一個在字符串中執行查找匹配的String方法,並且使用替換字符串替換掉匹配到的子字符串。 6 split 一個使用正則表達式或者一個固定字符串分隔一個字符串,並將分隔后的子字符串存儲到數組中的String方法。
三.正則表達式的簡單使用
1.驗證Email
一般Email以@分隔,@符合前面是用戶的郵箱名,@符合后面是郵箱服務器的域名
1 例子:/\w+@\w+\.\w+/.test('testname@126.com')
2.驗證Url
一般是http://www.baidu.com 或者https://www.qq.com
1 例子:/https?:\/\/\w+\.\w+(\.\w+)+/.test('http://www.qq.com')
注意//像正則表達式的/pattern/.所以要對/進行轉義成本來的意思
3.原內容提取
如商品:可樂,價格:2元 提取可樂=2元
1 "商品:可樂,價格:2元".replace(/商品:(\S+)(?=\,),價格:(\d+)(?=元)元/,'$1=$2元')
四.正則表達式的原理和性能
正則表達式是使用正則引擎進行運算和處理的,常見的正則引擎包括
1. DFA (Deterministic finite automaton) 確定型有窮自動機
2. NFA (Non-deterministic finite automaton) 非確定型有窮自動機,大部分都是NFA
簡單解釋:按照所給出的正則表達式按照從左到右的順序加上部分優先規則逐個去匹配,第一個字符不成功丟棄,從第二個字符開始重新匹配,嘗試完所給的字符所有可能的匹配直到所給的正則表達式都匹配到再判斷成功和失敗
規則一 優先選擇最左端的匹配結果
規則二 標准量詞是匹配優先的* ? + {m,n}
規則三 過度的優先匹配
規則四 表達式為主
規則五 回溯
如/a*b*d/ 要匹配aaaaabcaabbcaaaabbd
1.aaaaab 成功c失敗
2.aaaab成功c失敗
3.aaab成功c失敗
4.aab成功c失敗
5.ab成功c失敗
6.b失敗
7.c失敗
8.aabb成功c失敗
9.abb成功c失敗
10b失敗
11b失敗
12 c失敗
13.aaaabbd 匹配成功
