正則表達式經(jīng)常用到,這篇文件做一下總結(jié)記錄
一、字符
字符:元字符和字面量字符
元字符是表示特殊含義的字符,包括:^ $ . [ ] { } - ? * + ( ) | \\字符。
字面量字符: 其他字符在表達式中都表示其原來的含義,為字面量字符。
1 位置字符
^:匹配字符串開始位置。
$:匹配字符串結(jié)束位置。
2 點字符
.:匹配除回車(\r)、換行(\n) 、行分隔符(\u2028)和段分隔符(\u2029)以外的所有字符。
3 選擇符
|: 表示‘或’關(guān)系,即/apple|banana/表示匹配apple或banana
4 轉(zhuǎn)義符
\: 那些有特殊含義的元字符,如果要匹配它們本身,就需要在它們前面要加上反斜杠。
5 特殊字符
一些不能打印的特殊字符
\n 匹配換行鍵。
\r 匹配回車鍵。
\t 匹配制表符 tab(U+0009)。
\v 匹配垂直制表符(U+000B)。
\f 匹配換頁符(U+000C)。
6 字符類
[]:有一系列字符可供選擇,只要匹配其中一個就可以了
6.1 脫字符(^)
脫字符只有在字符類的第一個位置才有特殊含義,否則就是字面含義。
[^abc]表示匹配不是a、b、c字符的其他字符
[^a-z]表示匹配不是a、b、c....到z字符的其他字符
6.2 連字符(-)
對于連續(xù)序列的字符,連字符(-)用來提供簡寫形式,表示字符的連續(xù)范圍,[0-9],[a-z],[A-Z]
7 預(yù)定義模式
某些常見模式的簡寫方式
\d 匹配0-9之間的任一數(shù)字,相當(dāng)于[0-9]。
\D 匹配所有0-9以外的字符,相當(dāng)于[^0-9]。
\w 匹配任意的字母、數(shù)字和下劃線,相當(dāng)于[A-Za-z0-9_]。
\W 除所有字母、數(shù)字和下劃線以外的字符,相當(dāng)于[^A-Za-z0-9_]。
\s 匹配空格(包括換行符、制表符、空格符等),相等于[ \t\r\n\v\f]。
\S 匹配非空格的字符,相當(dāng)于[^ \t\r\n\v\f]。
\b 匹配詞的邊界。
\B 匹配非詞邊界,即在詞的內(nèi)部。
8 重復(fù)類{}
精確匹配次數(shù)
{n}表示恰好重復(fù)n次,{n,}表示至少重復(fù)n次,{n,m}表示重復(fù)不少于n次,不多于m次。
9 量詞符
?:出現(xiàn)0次或1次,等同于{0, 1}
*:出現(xiàn)0次或多次,等同于{0,}。
+:出現(xiàn)1次或多次,等同于{1,}。
10 修飾符
i:忽略大小寫
g:全局匹配
let str = "banana"
// 單個修飾符
/Banana/.test(str) // false
/Banana/i.test(str) // true
str.replace(/a/,'x') // 'bxnana'
str.replace(/a/g,'x') // 'bxnxnx'
// 多個修飾符
str.replace(/A/ig,'x') // 'bxnxnx'
str.replace(/A/g,'x') // 'banana'
11 貪婪匹配
三個量詞符(?*+),默認情況下都是最大可能匹配,即匹配直到下一個字符不滿足匹配規(guī)則為止
*?:出現(xiàn)0次或多次,匹配時采用非貪婪模式
+?:出現(xiàn)1次或多次,匹配時采用非貪婪模式
二、實例方法
1 RegExp正則對象方法
RegExp.prototype.test() 執(zhí)行一個檢索,用來查看正則表達式與指定的字符串是否匹配。返回 true 或 false。
RegExp.prototype.exec() 執(zhí)行一個搜索匹配。返回一個結(jié)果數(shù)組或 null。
let str = 'banana'
let regExp = /^b[a-z]?/
regExp.test(str) // true
let regExp = /an/g
let regExp2 = /(b)a(n)([a-z])/g
regExp.exec(str) // [an]
regExp2.exec(str) // ["bana", "b", "n", "a"]
2 String字符串方法
String.prototype.match() // 檢索返回一個字符串匹配正則表達式的結(jié)果
String.prototype.search() // 返回正則表達式在字符串中首次匹配項的索引;否則,返回 -1
String.prototype.replace() // 返回替代模式所取代的新的字符串
String.prototype.split() // 返回源字符串以分隔符出現(xiàn)位置分隔而成的一個 Array