正則表達式學習過屢次,然而過一陣子就忘記了,要用的時候又想不起來。今天抽空作了一下正則的整理,方便之後的複習和查閱。正則表達式
^向上尖頭學習
當^放在[]裏面,表示取反;放在[]外面,表示一行的字符串的開頭code
eg: /^[^a-b]w+/
匹配不是a或b開頭的字符串ip
點號 .字符串
在方括號裏:匹配任意一個字符(除了\n)io
在方括號外:匹配任何字符。若是要想表示點號自己,要轉義一下 .console
\d
匹配數字,等價於[0-9]
function
\D
匹配一個非數字,等價於 [^0-9]
登錄
\s
匹配任何空白字符,包括空格、製表符、換頁符等等。等價於 [\f\n\r\t\v]
基礎
\w
匹配數字或字母或下劃線,等價於 [A-Za-z0-9_]
\W
匹配非數字和字母和下劃線,等價於 [^A-Za-z0-9_]
星號 * (數量限定符)
匹配前面的子表達式出現0次或者無限次,等價於{0,}
加號 + (數量限定符)
匹配前面的子表達式出現1次或者屢次,等價於{1,}
?
匹配前面的子表達式出現0次或者1次,等價於{0,1}
{m}
匹配前面的子表達式出現m次
{m,} (數量限定符)
匹配前面的子表達式至少出現m次
{m,n}
匹配前面的子表達式出現最少m次,最多n次
$
匹配字符串結尾
b
匹配單詞的開始或結束
B
匹配單詞的非開始和結束
方括號[]
[]表示"或"邏輯
eg: [abc]表示a或者b或者c
括號()
單獨使用: 表示分組
括號裏面有 | :表示或邏輯
正向和反向斷言
(?=pattern) (?!pattern) (?<=pattern) (?<!pattern)
短線- 在方括號中
當-在第一個字符時,表示自己;不在第一個字符時,表示區間[a-p]
表示從a到p
正則表達式中包含數量修飾符時,會盡量多的匹配字符。
/a.*b/,它將會匹配最長的以a開始,以b結束的字符串。好比字符串aabab,它會匹配整個字符串。
將貪婪匹配轉化爲懶惰匹配:
數量限定符後加問號
正向確定:(?=pattern)
正向否認:(?!pattern)
反向確定:(?<=pattern)
反向否認:(?<!pattern)
斷言能夠疊加使用
登陸密碼的例子:
包含大小字母和數字,至少8位
let reg = /^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[d])[a-zA-Zd]{8,}/g
這個正則表達式,前面三個括號裏是三個正向斷言,即,字符串需知足,從開頭開始,知足 /.*?[a-z]/
,/.*?[A-Z]/
和 /.*?[d]/
。即同時知足。有大寫字母,小寫字母,數字。
1,千分製表達式:
思路:找到三個數字前面的那個數,給這個數後面加個逗號
str.replace(/(d)(?=(d{3})+$)/g, function ($1) { console.log($1) return $1 + ',' })
2, 手機號中間加掩碼
思路:須要匹配的那一項,後面是四個數字
str.replace(/(d{3})(?=d{4}$)/, '***')
3,去掉先後的空格
方法一:
思路:字符串的開頭字符和末尾字符
tip:若是每加g修飾符,將只會去掉str開頭的空格
str.replace(/(^s*)|(s*$)/g, '')
方法二:
思路:要匹配的那一項,先後是空格
tip:子項(.*?)中的問號不能去掉,去掉後會進行末尾的空格將去不掉
str.replace(/^[s]*(.*?)[s]*$/, '$1')
後面會再補充一下非獲取匹配 和 正則表達式的例子。