Regular Expression使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的字符串
1-1 工具
-
Javascript正則可視化工具 https://regexper.com
Paste_Image.png -
Sublime-Text 正則匹配功能
Paste_Image.png
2-1 RegExp對(duì)象
JavaScript通過內(nèi)置對(duì)象RegExp支持正則表達(dá)式
實(shí)例化RegExp對(duì)象
- 字面量
var reg = /\bis\b/g;
// \b : word boundary 單詞邊界
- 構(gòu)造函數(shù)
var reg = new RegExp('\\bis\\b', 'g');
修飾符
- g:global 全文搜索,不添加,搜索到第一個(gè)匹配停止
- i:ignore case 忽略大小寫,默認(rèn)大小寫敏感
- m:multiple lines 多行搜索
2-1 元字符
元字符在正則表達(dá)式中有特殊含義的非字母字符
2-2 字符類
字符類
- 我們可以使用元字符[]來構(gòu)建一個(gè)簡單的類
- 所謂類是指某些特性的對(duì)象,一個(gè)泛指,而不是特指某個(gè)字符
- 表達(dá)式[abc]把字符a、b、c歸為一類,表達(dá)式可以匹配這類的字符
'a1b2c3d4'.replace(/[abc]/g, 'x');
x1x2x3d4
字符類取反
- 使用元字符^創(chuàng)建 反向類/負(fù)向類
- 反向類的意思是不屬于某類的內(nèi)容
- 表達(dá)式[^abc]表示不是字符a或b或c的內(nèi)容
a1b2c3d4.replace(/[^abc]/g, 'x');
axbxcxxx
2-3 范圍類
- 正則表達(dá)式還提供了范圍類
- 我們可以使用[a-z]來連接兩個(gè)字符表示從a到z的任意字符
- 這個(gè)是閉區(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 預(yù)定義類
預(yù)定義類
- "." :除回車和換行之外的所有字符 [^\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結(jié)尾
- \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 分組
分組 使用()可以達(dá)到分組的功能,使量詞作用于分組
'a1b2c3d4'.replace(/([a-z]\d){3}/g, 'X')
Xd4
或 使用“|”可以達(dá)到或的效果
'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

