正則概述
- 定義: 規定字符串中字符出現規則的表達式
- RegExp對象: 封裝了一條正則表達式, 提供了使用正則表達式驗證和查找的方法
- 如何創建正則表達式對象:
- var exp = /正則表達式/gi;
- var exp = new RegExp(“正則表達式”,”gi”);
- 正則表達式中所有\都要寫成\
- 貪婪模式: 默認情況下,正則表達式都會匹配儘量長的字符串
- 懶惰模式: 只匹配最短的符合條件的字符串
- 貪婪模式轉懶惰模式方法: 量詞後加?
正則使用
- 何時使用: 查找、驗證、替換、切割
- 規則:
- 最簡單的正則表達式: 關鍵詞原文 —— 必須和原文完全匹配
- 備選字符集: 規定某一位字符的備選字符列表, 必須且只能多選一
- 如: 我[愛恨]你
- 如果備選字符的unicode號連續, 可用-符號連接開頭字符和結尾字符
- 如: [0-9]
- [^…]: 表示否定字符集
- 預定義字符集: 針對常用的備選字符集提供的簡化符號
- \d: 數字
- \w: 字母數字或下劃線
- \s: 空字符, 空格、製表符、換行
- .: 除換行外, 其餘所有字符
- 量詞: 規定字符集出現的字數, 默認一個量詞, 僅修飾左側緊鄰的字符集
- 確定數量
- {m,n} : 至少m個, 至多n個
- {m,} : m個以上
- {m} : 必須m個
- 不確定數量
- * : 可有可無, 多了不限
- + : 1個以上
- ? : 可有可無, 最多一個
- 確定數量
- 選擇和分組
- 選擇: | 讀作”或”
- 分組: ()
- 何時使用: 如(+86|0086)?\s*1[34578]\d{9}
- 指定匹配位置
- 開頭: ^
- 結尾: $
- 何時使用: 驗證時必須前加^後加$
- 零寬斷言
- (?!exp)爲零寬斷言, 表示斷言之後不能爲exp
正則API
- 查找
- var arr = exp.exec(str); //同時獲得關鍵字的內容和位置
- exec每次只能找到下一個匹配的關鍵詞
- arr[0]保存了本次找到的關鍵詞內容, 如果找不到, 返回null
- arr.index屬性保存本次找到的關鍵詞的首字母位置
- var arr = exp.exec(str); //同時獲得關鍵字的內容和位置
- 驗證
- var bool = exp.test(str); //驗證str是否符合exp的格式
- 符合返回true, 不符合返回flase
- 何時使用
- 驗證格式時
- 如何使用
- 可直接放入if中, 作爲條件
- var bool = exp.test(str); //驗證str是否符合exp的格式
- 獲得本次查找結果中的部分內容: 2步
- 在正則表達式中用(), 包裹住需要獲取的部分
- 在本次查找的同時, 使用RegExp.$n, 獲得第n個括號中匹配的子內容