1. 正則表達(dá)式概述
1.1 什么是正則表達(dá)式
正則表達(dá)式( Regular Expression )
是用于匹配字符串中字符組合的模式频蛔。在 JavaScript中,正則表達(dá)式也是對象浑劳。
正則表通常被用來檢索、替換那些符合某個模式(規(guī)則)的文本寸痢,例如驗證表單:用戶名表單只能輸入英文字母呀洲、數(shù)字或者下劃線, 昵稱輸入框中可以輸入中文(匹配)。此外道逗,正則表達(dá)式還常用于過濾掉頁面內(nèi)容中的一些敏感詞(替換)兵罢,或從字符串中獲取我們想要的特定部分(提取)等 。
其他語言也會使用正則表達(dá)式滓窍,本階段我們主要是利用 JavaScript 正則表達(dá)式完成表單驗證卖词。
1.2 正則表達(dá)式的特點(diǎn)
靈活性、邏輯性和功能性非常的強(qiáng)吏夯。
可以迅速地用極簡單的方式達(dá)到字符串的復(fù)雜控制此蜈。
對于剛接觸的人來說,比較晦澀難懂噪生。比如:
^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
- 實際開發(fā),一般都是直接復(fù)制寫好的正則表達(dá)式. 但是要求會使用正則表達(dá)式并且根據(jù)實際情況修改正則表達(dá)式. 比如用戶名:
/^[a-z0-9_-]{3,16}$/
2. 正則表達(dá)式在 JavaScript 中的使用
2.1 創(chuàng)建正則表達(dá)式
在 JavaScript 中裆赵,可以通過兩種方式創(chuàng)建一個正則表達(dá)式。
2.1.1 通過調(diào)用 RegExp 對象的構(gòu)造函數(shù)創(chuàng)建
var 變量名 = new RegExp(/表達(dá)式/);
2.1.1 通過字面量創(chuàng)建
var 變量名 = /表達(dá)式/;
// 注釋中間放表達(dá)式就是正則字面量
2.2 測試正則表達(dá)式 test
test() 正則對象方法跺嗽,用于檢測字符串是否符合該規(guī)則战授,該對象會返回 true 或 false,其參數(shù)是測試字符串桨嫁。
regexObj.test(str)
- regexObj 是寫的正則表達(dá)式
- str 我們要測試的文本
- 就是檢測str文本是否符合我們寫的正則表達(dá)式規(guī)范.
3. 正則表達(dá)式中的特殊字符
3.1 正則表達(dá)式的組成
一個正則表達(dá)式可以由簡單的字符構(gòu)成植兰,比如 /abc/,也可以是簡單和特殊字符的組合璃吧,比如 /ab*c/ 楣导。其中特殊字符也被稱為元字符,在正則表達(dá)式中是具有特殊意義的專用符號畜挨,如 ^ 筒繁、$ 、+ 等巴元。
3.2 邊界符
正則表達(dá)式中的邊界符(位置符)用來提示字符所處的位置膝晾,主要有兩個字符。
邊界符 | 說明 |
---|---|
^ | 表示匹配行首的文本(以誰開始) |
$ | 表示匹配行尾的文本(以誰結(jié)束) |
如果 ^ 和 $ 在一起务冕,表示必須是精確匹配。
3.3 字符類
字符類表示有一系列字符可供選擇幻赚,只要匹配其中一個就可以了禀忆。所有可供選擇的字符都放在方括號內(nèi)
。
3.3.1 [] 方括號
/[abc]/.test('andy') // true
后面的字符串只要包含 abc 中任意一個字符落恼,都返回 true 箩退。
3.3.2 [-] 方括號內(nèi)部 范圍符-
/^[a-z]$/.test(c') // true
方括號內(nèi)部加上 - 表示范圍,這里表示 a 到 z 26個英文字母都可以佳谦。
3.3.3 [^] 方括號內(nèi)部 取反符^
/[^abc]/.test('andy') // false
- 方括號內(nèi)部加上 ^ 表示取反戴涝,只要包含方括號內(nèi)的字符,都返回 false 。
注意和邊界符 ^ 區(qū)別啥刻,邊界符寫到方括號外面奸鸯。
3.3.4. 字符組合
/[a-z1-9]/.test('andy') // true
方括號內(nèi)部可以使用字符組合,這里表示包含 a 到 z 的26個英文字母和 1 到 9 的數(shù)字都可以可帽。
3.4 量詞符
量詞符用來設(shè)定某個模式出現(xiàn)的次數(shù)
娄涩。
量詞. | 說明 |
---|---|
* | 重復(fù)零次或更多次 |
+ | 重復(fù)一次或更多次 |
? | 重復(fù)零次或一-次 |
{n} | 重復(fù)n次 |
{n,} | 重復(fù)n次或更多次 |
{n,m} | 重復(fù)n到m次 |
3.5 括號總結(jié)
- 大括號 量詞符. 里面表示重復(fù)次數(shù)
- 中括號 字符集合。匹配方括號中的任意字符.
- 小括號 表示優(yōu)先級
3.6 預(yù)定義類
預(yù)定義類指的是某些常見模式的簡寫方式映跟。
預(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 | 匹配空格(包括換行符荸镊、制表符咽斧、空格符等), 相等于[ \tr\nlv\f] |
\S | 匹配非空格的字符贷洲,相當(dāng)于[^ \trln\v\f] |
4. 正則表達(dá)式中的替換
4.1 replace 替換
replace() 方法可以實現(xiàn)替換字符串操作收厨,用來替換的參數(shù)可以是一個字符串或是一個正則表達(dá)式。
stringObject.replace(regexp/substr,replacement)
第一個參數(shù): 被替換的字符串 或者 正則表達(dá)式
第二個參數(shù): 替換為的字符串
返回值是一個替換完畢的新字符串
4.2 正則表達(dá)式參數(shù)
/表達(dá)式/[switch]
switch(也稱為修飾符) 按照什么樣的模式來匹配. 有三種值:
g:全局匹配
i:忽略大小寫
gi:全局匹配 + 忽略大小寫