正則表達式總結

本文已參與好文召集令活動,點擊查看:後端、大前端雙賽道投稿,2萬元獎池等你挑戰!html

參考地址:www.runoob.com/regexp/rege…前端

爲啥寫的緣由是,作前端好久了,可是正則的書寫仍是百度,因此就在這裏把用獲得的所有寫上,下次有須要,直接看本身寫的。正則表達式

經常使用表達式

手機號校驗

校驗規則使用了^ [] \d {} $,分別表明着mongodb

  1. 排除1之外的其餘數字
  2. [3-9]這個區間內的數字
  3. \d 匹配數字字符
  4. {3,9}第三位起,替換9位數字
  5. $ 起結束做用

假設你沒有寫最後$,即便超出位數,依然爲trueexpress

let phone = /^1[3-9]\d{3,9}$/
console.log(phone.test(手機號))
// true
複製代碼

郵箱校驗

  1. ^[a-zA-Z0-9]第一位開頭必須是大小寫字母或數字
    • 起和第二位拼接的左右
  2. \w 第二位起就比較隨意,數字,字母,下劃線都成
  3. @ 拼接@符號
  4. 最後的是一個總體,分前部分數字,字母加.和後半部分數字,字母
let email = /^[a-zA-Z0-9]+\w+@([a-zA-Z0-9]+\.+[a-zA-Z0-9])/
console.log(email.test(郵箱號))
複製代碼

正則的概念

正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱爲"元字符")。後端

正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。markdown

語法

正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),能夠用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。oop

普通字符

[ABC] 匹配[***]中的全部字符

let string = 'abc1efg'
console.log(string.replace(/[0-9]/g, 'M'))
// abcMefg
複製代碼

[^ABC] 匹配除了 [***] 中字符的全部字符

let string = 'abc1efg'
console.log(string.replace(/[^0-9]/g, 'M'))
// MMM1MMM
複製代碼

[A-Z] 表示一個區間

表示一個區間,匹配全部大寫字母,[a-z] 表示全部小寫字母。佈局

let string = 'ABCedf1'
console.log(string.replace(/[A-Z]|[a-z]/g, '0'))
// 0000001
複製代碼

.

[\s\S] 匹配全部

\s 是匹配全部空白符,包括換行,\S 非空白符,不包括換行。post

let string = `a b c d e f 1 *`
console.log(string.replace(/[\s\S]/g, '0'))
// 000000000000000
複製代碼

\w 匹配字母、數字、下劃線

等價於 [A-Za-z0-9_]

let string = `a b c d _ e f 1 *`
console.log(string.replace(/[\s\S]/g, '1'))
// 11111111111111111
複製代碼

非打印字符

非打印字符也能夠是正則表達式的組成部分。

\cx

匹配由x指明的控制字符。例如, \cM 匹配一個 Control-M 或回車符。x 的值必須爲 A-Z 或 a-z 之一。不然,將 c 視爲一個原義的 'c' 字符。

\f

匹配一個換頁符。等價於 \x0c 和 \cL。

\n

匹配一個換行符。等價於 \x0a 和 \cJ。

\r

匹配一個回車符。等價於 \x0d 和 \cM。

\t

匹配一個製表符。等價於 \x09 和 \cI。

\v

匹配一個垂直製表符。等價於 \x0b 和 \cK。

特殊字符

$ 匹配輸入字符串的結尾位置

let string = 'a b c a'
console.log(string.replace(/a$/g, '2'))
// a b c 2
複製代碼

( ) 標記一個子表達式的開始和結束位置

標記一個子表達式的開始和結束位置。子表達式能夠獲取供之後使用。要匹配這些字符,請使用 ( 和 )。

* 匹配前面的子表達式零次或屢次

let string = 'abc'
console.log(string.replace(/ab*/gim, '3'))
// 3c
複製代碼

+ 匹配前面的子表達式一次或屢次

匹配前面的子表達式一次或屢次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。

. 匹配除換行符 \n 以外的任何單字符

匹配除換行符 \n 以外的任何單字符。要匹配 . ,請使用 \ . 。

[ 標記一箇中括號表達式的開始。

要匹配 [,請使用 \ [。

? 匹配前面的子表達式零次或一次

例如,"do(es)?" 能夠匹配 "do" 、 "does" 中的 "does" 、 "doxy" 中的 "do" 。? 等價於 {0,1}

\ 將下一個字符標記爲或特殊字符、或原義字符、或向後引用、或八進制轉義符

例如, 'n' 匹配字符 'n'。'\ n' 匹配換行符。序列 '\ \ ' 匹配 "\ ",而 '\ (' 則匹配 "("。

^ 匹配輸入字符串的開始位置

匹配輸入字符串的開始位置, 除非在方括號表達式中使用,當該符號在方括號表達式中使用時,表示不接受該方括號表達式中的字符集合

{ 標記限定符表達式的開始

要匹配 {,請使用 {。

| 指明兩項之間的一個選擇

要匹配 |,請使用 |。

限定符

{n} n 是一個非負整數

n 是一個非負整數。匹配肯定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',可是能匹配 "food" 中的兩個 o。

{n,} n 是一個非負整數。

至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的全部 o。'o{1,}' 等價於 'o+'。'o{0,}' 則等價於 'o*'。

{n,m} m 和 n 均爲非負整數,其中n <= m。

。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。

定位符

\b 匹配一個單詞邊界,即字與空格間的位置。

let string = 'abcab ab'
console.log(string.replace(/\bab/g, '34'))
// 34cab 34
複製代碼

\B 非單詞邊界匹配。

let string = 'abcab ab'
console.log(string.replace(/\Bab/g, '34'))
// abc34 ab
複製代碼

修飾符

i ignore - 不區分大小寫

將匹配設置爲不區分大小寫,搜索時不區分大小寫: A 和 a 沒有區別。

g global - 全局匹配

查找全部的匹配項。

m multi line - 多行匹配

使邊界字符 ^ 和 $ 匹配每一行的開頭和結尾,記住是多行,而不是整個字符串的開頭和結尾。

s 特殊字符圓點 . 中包含換行符 \n

默認狀況下的圓點 . 是 匹配除換行符 \n 以外的任何字符,加上 s 修飾符以後, . 中包含換行符 \n。

元字符

元字符的元素與語法中的多數類似,所以只寫那些不一樣的。

\ 將下一個字符標記爲一個特殊字符、或一個原義字符、或一個 向後引用、或一個八進制轉義符

例如,'n' 匹配字符 "n"'\n' 匹配一個換行符。序列 '\\' 匹配 "\" 而 "\(" 則匹配 "("。 複製代碼

x|y 匹配 x 或 y

\d 匹配一個數字字符

等價於 [0-9]

\D 匹配一個非數字字符

等價於 [^0-9]。

\w 匹配字母、數字、下劃線。等價於'[A-Za-z0-9_]'。

\W 匹配非字母、數字、下劃線。等價於 '[^A-Za-z0-9_]'。

\xn 匹配 n,其中 n 爲十六進制轉義值

十六進制轉義值必須爲肯定的兩個數字長。例如,'\x41' 匹配 "A"。'\x041' 則等價於 '\x04' & "1"。正則表達式中可使用 ASCII 編碼。

\num 匹配 num,其中 num 是一個正整數。

對所獲取的匹配的引用。例如,'(.)\1' 匹配兩個連續的相同字符。

\nm 標識一個八進制轉義值或一個向後引用

若是 \nm 以前至少有 nm 個得到子表達式,則 nm 爲向後引用。若是 \nm 以前至少有 n 個獲取,則 n 爲一個後跟文字 m 的向後引用。若是前面的條件都不知足,若 n 和 m 均爲八進制數字 (0-7),則 \nm 將匹配八進制轉義值 nm。

\nml 若是 n 爲八進制數字 (0-3),且 m 和 l 均爲八進制數字 (0-7),則匹配八進制轉義值 nml。

\un 匹配 n,其中 n 是一個用四個十六進制數字表示的 Unicode 字符。

例如, \u00A9 匹配版權符號 (?)

運算符優先級

  1. 正則表達式從左到右進行計算,並遵循優先級順序
  2. 相同優先級的從左到右進行運算,不一樣優先級的運算先高後低。

\ 轉義符

(), (?:), (?=), [] 圓括號和方括號

*, +, ?, {n}, {n,}, {n,m} 限定符

^, $, \任何元字符、任何字符 定位點和序列(即:位置和順序) |

| 替換,"或"操做

字符具備高於替換運算符的優先級,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",請使用括號建立子表達式,從而產生"(m|f)ood"。

?=、?<=、?!、?<! 的使用區別

x(?=y) 查找 y前邊的x

let string = 'abc'
console.log(string.replace(/a(?=b)/g, '5'))
// 5bc
複製代碼

(?<=y)x 查找y後邊的x

let string = 'abac'
console.log(string.replace(/(?<=b)a/g, '5'))
// ab5c
複製代碼

x(?!y) 查找後面不是 y 的 x

let string = 'abac'
console.log(string.replace(/a(?!b)/g, '5'))
// ab5c
複製代碼

(?<!y)x 查找前面不是 y 的 x。

let string = 'abac'
console.log(string.replace(/(?<!b)a/g, '5'))
// 5bac
複製代碼

相關文章

mongodb基礎用法

flex佈局總結

總結

正則表達通常是平時不咋注意,用的時候特別頭疼,這是個人感受。 因此照着文檔,寫了一遍,有的本身也實驗了一遍,有不對的地方,還請多多指導,歡迎點贊,留言!!!

相關文章
相關標籤/搜索