有些知識,咱們只須要付出一點點時間,把它掌握了,會大大提升咱們的效率,節省咱們的時間。正則表達式就是這樣的知識,可是,做爲入行好幾年的我來講,正則表達式一直是一頭霧水,今天決定把它好好研究研究。正則表達式
正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。在不少文本編輯器裏,正則表達式一般被用來檢索、替換那些匹配某個模式的文本。編輯器
通俗來說:正則表達式是一組由字母和符號組成的特殊文本, 它能夠用來從文本中找出知足你想要的格式的句子.函數
Javascript 經過內置對象RegExp支持正則表達式,有兩種方法實例化RegExp對象code
const reg = /\bqing\b/g
regexp
const reg = new RegExp('\\bqing\\b','g')
cdn
正則表達式主要依賴於元字符. 元字符不表明他們自己的字面意思, 他們都有特殊的含義. 一些元字符寫在方括號中的時候有一些特殊的意思. 如下是一些元字符的介紹:對象
點運算符匹配除了換行符之外的任意字符blog
方括號用來指定一個字符集,在方括號中使用連字符來指定字符集的範圍,而且方括號中的字符集不關心順序ip
通常來講^表示一個字符串的開頭,但當它用在方括號裏面的時候,表示否認的關係。好比[^ar]匹配一個後面跟着ar的除了c的任意字符。字符串
*號匹配在 *以前的字符出現大於等於0次,就是出現0次或屢次
+號匹配+號以前的字符出現 >=1 次.
?表示在?以前的字符爲可選,即表示出現0次或者1次。好比[T]?he
匹配字符串he和The。
在正則表達式中 {} 是一個量詞, 經常使用來一個或一組字符能夠重複出現的次數. 例如, 表達式 [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的數字.
正則表達式支持必定的範圍規則好比[a-z] [0-9] [A-Z]
反斜線 \ 在表達式中用於轉碼緊跟其後的字符. 用於指定 { } [ ] / \ + * . $ ^ | ? 這些特殊字符. 若是想要匹配這些特殊字符則要在其前面加上反斜線 .
字符 | 含義 |
---|---|
^ | 以^後面的字符開頭 |
$ | 以$前面的字符結尾 |
\b | 單詞邊界,指[a-zA-Z0-9]以外的字符 |
\B | 非單詞邊界 |
修飾符 | 描述 |
---|---|
i | 忽略大小寫 |
g | 全局搜索 |
m | multiple lines多行匹配 |
正則表達式提供一些經常使用的字符集簡寫. 以下:
簡寫 | 描述 |
---|---|
. | 除換行符外的全部字符 |
\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 | 匹配一個製表符 |
正則表達式默認採用貪婪匹配模式,在該模式下意味着會匹配儘量長的子串。咱們可使用 ? 將貪婪匹配模式轉化爲惰性匹配模式。
正則表達式中有前瞻(Lookahead)和後顧(Lookbehind)的概念,這兩個術語很是形象的描述了正則引擎的匹配行爲。須要注意一點,正則表達式中的前和後和咱們通常理解的先後有點不一樣。一段文本,咱們通常習慣把文本開頭的方向稱做「前面」,文本末尾方向稱爲「後面」。可是對於正則表達式引擎來講,由於它是從文本頭部向尾部開始解析的(能夠經過正則選項控制解析方向),所以對於文本尾部方向,稱爲「前」,由於這個時候,正則引擎還沒走到那塊,而對文本頭部方向,則稱爲「後」,由於正則引擎已經走過了那一塊地方。
定義一個正向前瞻要使用(),在括號內部使用一個問好和等號:(?=xxx)
負向前瞻只須要把正向前瞻的=改爲! 即(?!xxx)
表達式 (T|t)he(?!\sfat) 匹配 The 和 the, 且其後不跟着 (空格)fat.
定義一個正向後顧要使用(),在括號內部使用一個問好、小於號和等號?<=xxx
用於篩選全部匹配結果, 篩選條件爲 其前跟隨着斷言中定義的格式. 例如, 表達式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat, 且其前跟着 The 或 the.
和正向後顧類似,只須要把=改爲!,?<!
用於篩選全部匹配結果, 篩選條件爲 其前不跟隨着斷言中定義的格式. 例如, 表達式 (?<!(T|t)he\s)(cat) 匹配 cat, 且其前不跟着 The 或 the.
/^1[34578][0-9]{9}$/
/http:(\/\/.+\.com)/
/^(\d{4})[/-](\d{2})[/-](\d{2})$/