Regular Expression使用單個字符串來描述、匹配一系列符合某個句法規(guī)則的字符串
1-1 工具
-
Javascript正則可視化工具 https://regexper.com
Paste_Image.png -
Sublime-Text 正則匹配功能
Paste_Image.png
2-1 RegExp對象
JavaScript通過內(nèi)置對象RegExp支持正則表達式
實例化RegExp對象
- 字面量
var reg = /\bis\b/g;
// \b : word boundary 單詞邊界
- 構造函數(shù)
var reg = new RegExp('\\bis\\b', 'g');
修飾符
- g:global 全文搜索,不添加,搜索到第一個匹配停止
- i:ignore case 忽略大小寫苫耸,默認大小寫敏感
- m:multiple lines 多行搜索
2-1 元字符
元字符在正則表達式中有特殊含義的非字母字符
2-2 字符類
字符類
- 我們可以使用元字符[]來構建一個簡單的類
- 所謂類是指某些特性的對象疫鹊,一個泛指膳叨,而不是特指某個字符
- 表達式[abc]把字符a洽洁、b、c歸為一類菲嘴,表達式可以匹配這類的字符
'a1b2c3d4'.replace(/[abc]/g, 'x');
x1x2x3d4
字符類取反
- 使用元字符^創(chuàng)建 反向類/負向類
- 反向類的意思是不屬于某類的內(nèi)容
- 表達式[^abc]表示不是字符a或b或c的內(nèi)容
a1b2c3d4.replace(/[^abc]/g, 'x');
axbxcxxx
2-3 范圍類
- 正則表達式還提供了范圍類
- 我們可以使用[a-z]來連接兩個字符表示從a到z的任意字符
- 這個是閉區(qū)間饿自,也就是包含a和z本身
'a1b2c3z4'.replace(/[a-z]/g, 'Q')
Q1Q2Q3Q4
- 在[]組成的類內(nèi)部都是可以連寫的[a-zA-Z]
'2020-12-12'.replace(/[0-9-]/g, 'A')
AAAAAAAAAA
2-4 預定義類
預定義類
- "." :除回車和換行之外的所有字符 [^\r\n]
- \d :數(shù)字字符 [0-9]
- \D :非數(shù)字字符 [^0-9]
- \s :空白符 [\t\n\x0B\f\r]
- \S :非空白符 [^\t\n\x0B\f\r]
- \w :單詞字符 [a-zA-Z_0-9](字母(單詞)、數(shù)字龄坪、下劃線)
- \W :非單詞字符 [^a-zA-Z_0-9]
邊界
- ^x :以x開始
- x$ :以x結尾
- \b :單詞邊界
- \B :非單詞邊界
2-5 量詞
- ? :出現(xiàn)零次或一次(最多出現(xiàn)一次)
- + :出現(xiàn)一次或多次(至少出現(xiàn)一次)
- * :出現(xiàn)零次或多次
- {n} :出現(xiàn)n次
- {n,m} :出現(xiàn)n~m次
- {n,} :至少出現(xiàn)n次
JS正則貪婪模式與非貪婪模式
貪婪模式盡可能多的匹配字符
'12345678'.replace('/\d{3,6}/, 'X')
X78
非貪婪模式 盡可能少的匹配昭雌,也就是一旦匹配成功不再繼續(xù)嘗試
'123456789'.match(/\d{3,5}?/g)
['123', '456', '789']
2-7 分組
分組 使用()可以達到分組的功能,使量詞作用于分組
'a1b2c3d4'.replace(/([a-z]\d){3}/g, 'X')
Xd4
或 使用“|”可以達到或的效果
'ByronCasper'.replace(/Byron|Casper/g, 'X')
反向引用
'2020-11-12'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$2$3$1')
11-12-2020
忽略分組
不希望捕獲某些分組健田,只需要在分組內(nèi)加上?:
(?:Byron).(ok)
// (ok) = $1