正則表達式?這一篇就夠了

有些知識,咱們只須要付出一點點時間,把它掌握了,會大大提升咱們的效率,節省咱們的時間。正則表達式就是這樣的知識,可是,做爲入行好幾年的我來講,正則表達式一直是一頭霧水,今天決定把它好好研究研究。正則表達式

1.什麼是正則表達式

正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些匹配某個模式的文本。編輯器

通俗來說:正則表達式是一組由字母和符號組成的特殊文本, 它能夠用來從文本中找出知足你想要的格式的句子.函數

2.js中Regexp對象

Javascript 經過內置對象RegExp支持正則表達式,有兩種方法實例化RegExp對象code

2.1字面量方法

const reg = /\bqing\b/gregexp

2.2構造函數

const reg = new RegExp('\\bqing\\b','g')cdn

3.正則表達式語法

3.1 元字符

正則表達式主要依賴於元字符. 元字符不表明他們自己的字面意思, 他們都有特殊的含義. 一些元字符寫在方括號中的時候有一些特殊的意思. 如下是一些元字符的介紹:對象

點運算符 .

點運算符匹配除了換行符之外的任意字符blog

3.2 字符類

[]

方括號用來指定一個字符集,在方括號中使用連字符來指定字符集的範圍,而且方括號中的字符集不關心順序ip

否認字符類

通常來講^表示一個字符串的開頭,但當它用在方括號裏面的時候,表示否認的關係。好比[^ar]匹配一個後面跟着ar的除了c的任意字符。字符串

3.3 重複次數

3.3.1 *字符

*號匹配在 *以前的字符出現大於等於0次,就是出現0次或屢次

3.3.2 +字符

+號匹配+號以前的字符出現 >=1 次.

3.3.3 ?字符

?表示在?以前的字符爲可選,即表示出現0次或者1次。好比[T]?he匹配字符串he和The。

3.4 {} 號

在正則表達式中 {} 是一個量詞, 經常使用來一個或一組字符能夠重複出現的次數. 例如, 表達式 [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的數字.

3.5 範圍類[-]

正則表達式支持必定的範圍規則好比[a-z] [0-9] [A-Z]

3.6 | 或運算符

3.7 轉碼特殊字符

反斜線 \ 在表達式中用於轉碼緊跟其後的字符. 用於指定 { } [ ] / \ + * . $ ^ | ? 這些特殊字符. 若是想要匹配這些特殊字符則要在其前面加上反斜線 .

3.8 邊界

字符 含義
^ 以^後面的字符開頭
$ 以$前面的字符結尾
\b 單詞邊界,指[a-zA-Z0-9]以外的字符
\B 非單詞邊界

3.9 修飾符(i, g, m)

修飾符 描述
i 忽略大小寫
g 全局搜索
m multiple lines多行匹配

4. 簡寫字符集

正則表達式提供一些經常使用的字符集簡寫. 以下:

簡寫 描述
. 除換行符外的全部字符
\w 匹配全部字母數字,等同於[a-zA-Z0-9]
\W 匹配全部非字母數字,即符號,等同於[^\w]
\d 匹配數字: [0-9]
\D 匹配非數字:[^\d]
\s 匹配全部空格字符,等同於: [\t\n\f\r\p{Z}]
\S 匹配全部非空格字符: [^\s]
\f 匹配一個換頁符
\n 匹配一個換行符
\r 匹配一個會車符
\t 匹配一個製表符

5. 貪婪匹配與惰性匹配 (Greedy vs lazy matching)

正則表達式默認採用貪婪匹配模式,在該模式下意味着會匹配儘量長的子串。咱們可使用 ? 將貪婪匹配模式轉化爲惰性匹配模式。

6. 零寬度斷言(先後預查)

正則表達式中有前瞻(Lookahead)和後顧(Lookbehind)的概念,這兩個術語很是形象的描述了正則引擎的匹配行爲。須要注意一點,正則表達式中的前和後和咱們通常理解的先後有點不一樣。一段文本,咱們通常習慣把文本開頭的方向稱做「前面」,文本末尾方向稱爲「後面」。可是對於正則表達式引擎來講,由於它是從文本頭部向尾部開始解析的(能夠經過正則選項控制解析方向),所以對於文本尾部方向,稱爲「前」,由於這個時候,正則引擎還沒走到那塊,而對文本頭部方向,則稱爲「後」,由於正則引擎已經走過了那一塊地方。

6.1 正向前瞻

定義一個正向前瞻要使用(),在括號內部使用一個問好和等號:(?=xxx)

6.2 負向前瞻

負向前瞻只須要把正向前瞻的=改爲! 即(?!xxx) 表達式 (T|t)he(?!\sfat) 匹配 The 和 the, 且其後不跟着 (空格)fat.

6.3 正向後顧

定義一個正向後顧要使用(),在括號內部使用一個問好、小於號和等號?<=xxx 用於篩選全部匹配結果, 篩選條件爲 其前跟隨着斷言中定義的格式. 例如, 表達式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat, 且其前跟着 The 或 the.

6.4 負向後顧

和正向後顧類似,只須要把=改爲!,?<!

用於篩選全部匹配結果, 篩選條件爲 其前不跟隨着斷言中定義的格式. 例如, 表達式 (?<!(T|t)he\s)(cat) 匹配 cat, 且其前不跟着 The 或 the.

7.應用

7.1 手機號正則

/^1[34578][0-9]{9}$/

7.2 URL分組替換

/http:(\/\/.+\.com)/

7.3 日期匹配與分組替換

/^(\d{4})[/-](\d{2})[/-](\d{2})$/

相關文章
相關標籤/搜索