一.正則表達式(規則表達式)
+ 由我們自己書寫規則
+ **專門用來檢測一個字符串是否符合我書寫的標准**
+ 一般都是用在 表單驗證 / 從字符串中獲取某些內容
二. 創建正則表達式的方式
1. 字面量創建
var reg = /abcd/
2. 內置構造函數創建
var reg = new RegExp('abcd')
正則表達式是一個復雜數據類型
倆個創建方法的區別
1. 字面量直接寫
+ 不能進行字符串拼接
2. 內置構造函數的方式
+ 第一個參數是寫在正則內部的符號
+ 當你需要寫一些正則的元字符的時候
+ 需要寫成 \\d
+ 第二個參數是標識符
+ 可以把多個標識符寫在一個字符串里面
+ 可以進行字符串拼接
// var reg1 = /abcd/ig
// console.log(reg1)
// 表示我想正則中 填充的內容是一個換行
// var reg2 = new RegExp('\n', 'ig')
// console.log(reg2)
// 表示你向正則中填充了一個 \n => var reg = /\n/
// var reg2 = new RegExp('\\d{2}', 'ig')
// console.log(reg2)
三.正則表達式就是用來檢測字符串是不是滿足要求的
1. test() 用來檢測字符串
語法: 正則表達式.test(字符串)
返回值: 如果字符串滿足我寫的規則,那么返回 true,否則返回 false
// 需要包含字符 abcd
var reg = /abcd/
var str = 'sfdasfsgefsa bcdasfjifgerjgnen'
// 用剛才的正則取檢測 str 這個字符串
var res = reg.test(str)
console.log(res)
四.元字符
1. `.`(點)
+ 非換行的任意字符
2. `\`(斜線)
+ 轉譯
+ 把有意義的變成沒有意義的
+ 把沒有意義的變成有意義的
3. \s (space 空格)
+ 空格
4. \S
+ 非空格
5. \d (digit (從0~9的任意一個)數字)
+ 數字
6. \D
+ 非數字
7. \w (word 單詞)
+ 數字字母下划線
8. \W
+ 非數字字母下划線
// 表示字符串里面包含着非換行的其他字符都可以
// var reg = /./
// var str = 'a\n'
// var res = reg.test(str)
// console.log(res)
// 表示字符串里面需要包含着一個 . 字符
// var reg = /\./
// var str = 'ab.cd'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一個 空格
// var reg = /\s/
// var str = 'abcd s'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一個非空格
// var reg = /\S/
// var str = ' a '
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一個數字
// var reg = /\d/
// var str = 'abcd sferg'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一個非數字
// var reg = /\D/
// var str = '123asdj'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要包含一個 字母也行數字也行下划線也行
// var reg = /\w/
// var str = '@#¥%……&'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要出現一個 非數字字母下划線 的內容
var reg = /\W/
var str = 'fegsasd……1231231___'
var res = reg.test(str)
console.log(res)
五.邊界符
+ 用來限制正則的邊界,也是限制字符串的邊界
1. ^
+ 開始
2. $
+ 表示結束
+ 在使用正則的表示表示以什么開頭以什么結尾
// 表示字符串需要以 a 開頭,a 要和 bcd 連着
// var reg = /^abcd/
// var str = 'abcdkjhklhksadadasad'
// var res = reg.test(str)
// console.log(res)
// 表示字符串需要以 d 結尾, abc 需要連着 d
// var reg = /abcd$/
// var str = 'kjhhlkhhkabcdaskjdhkabcd'
// var res = reg.test(str)
// console.log(res)
// 表示字符串從開頭到結尾只能由 abcd 四個字母組成,並且順序不能變
// var reg = /^abcd$/
// var str = 'abcd'
// var res = reg.test(str)
// console.log(res)
// var reg = /^\d\d\d\d\d$/
// var str = '111456'
// var res = reg.test(str)
// console.log(res)
六.限定符
+ 用來描述每一個正則 元字符 出現的次數
1. +(加號)
表示 1 到 正無窮次
2. *(星號)
表示 0 到 正無窮次
3. ?(問號)
表示 0 或者 1 次
4. {n}
表示 n 次
5. {n,}
表示至少 n 次 {1,}
{1,} 等價於 +
{0,} 等價於 *
6. {n,m}
表示 至少 n 次,至多 m 次
{0,1} 等價於 ?
// 表示字符串只能由 一位以上的數字組成
// var reg = /^\d+$/
// var str = '123454'
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要出現數字 0 到 正無窮次
// var reg = /\d*/
// var str = 'abcdefg123456'
// var res = reg.test(str)
// console.log(res)
// 字符串只能由 0 到多個數字組成
// var reg = /^\d*$/
// var str = ''
// var res = reg.test(str)
// console.log(res)
// 表示字符串中需要出現數字 0 次 或者 1 次
// var reg = /\d?/
// var str = 'adasdsd1234'
// var res = reg.test(str)
// console.log(res)
// 表示字符串只能由 0 個 或 1 個數字組成
// var reg = /^\d?$/
// var str = '123'
// var res = reg.test(str)
// console.log(res)
// 表示字符串里面需要包含一個 三個數字連着 的字符片段
// var reg = /\d{3}/
// var str = 'abcdefg123456'
// var res = reg.test(str)
// console.log(res)
// 表示字符串只能由 三位數字 組成
// var reg = /^\d{3}$/
// var str = '12345'
// var res = reg.test(str)
// console.log(res)
// 表示字符串從開頭到結尾只能由三位以上的數字組成
// var reg = /^\d{3,}$/
// var str = '12345676889'
// var res = reg.test(str)
// console.log(res)
// 表示字符串只能由 6 ~ 16 位數字組成
var reg = /^\d{6,16}$/
var str = '1234567890123456'
var res = reg.test(str)
console.log(res)
// 在谷歌應用商店搜索 FEHelper
七.特殊符號
1. () 小括號
+ 表示一個集合
+ 在捕獲的時候單獨捕獲(講方法的時候說)
2. []
+ 表示一個任意選擇的集合
+ 出現在中括號內的內容出現任意一個就行
3. [^]
+ 表示一個非任意選擇集合
+ 出現在這個符號中的任意一個字符都不能出現
4. |
+ 或
+ || 邏輯或
+ | 占位或
+ 一般和小括號一塊使用
5. -(中划線,英文狀態的中划線)
+ 到(至)
+ 一般和中括號一起使用
+ 必須是 ASCII 編碼挨着的
+ [0-9] 等價於 \d
+ [^0-9] 等價於 \D
+ [0-9a-zA-Z_] 等價於 \w
+ [^0-9a-zA-Z_] 等價於 \W
// 表示字符串從開頭到結尾需要 abcdabcd
// var reg = /^(abcd){2}$/
// var str = 'abcdabcd'
// var res = reg.test(str)
// console.log(res)
// 表示字符串從開頭到結尾,只能由 a 或者 b 或者 c 或者 d 組成,並且只能出現兩次
// var reg = /^[abcd]{2}$/
// var str = 'ad'
// var res = reg.test(str)
// console.log(res)
// 表示這一位字符不能是 a 不能是 b 不能是 c 不能是 d,其他的都行
// var reg = /^[^abcd]$/
// var str = 'e'
// var res = reg.test(str)
// console.log(res)
// 表示這個位置寫的內容可以是 163 可以是 162 可以是 sina 可以是 qq
// var reg = /^(163|162|sina|qq)$/
// var str = '163'
// var res = reg.test(str)
// console.log(res)
// var reg = /^[0-9]$/
// var str = 'A'
// var res = reg.test(str)
// console.log(res)
八.正則的方法
1. 一個叫做 匹配
+ 就是檢測看看字符串是否符合規則
+ test()
2. 一個叫做 捕獲
+ 就是把字符串中符合要求的那一段字符給我單獨拿出來
+ exec()
exec
語法: 正則表達式.exec(要捕獲的字符串)
返回值: 是一個數組
有一些內容
數組第 0 項 是按照正則要求捕獲出來的內容
index: 表示我找到的這個字符片段是從哪一個索引開始的
input: 表示原始字符串
因為正則的懶惰性
捕獲完畢以后,下次捕獲的時候還是從索引 0 開始查找
當正則有了標識符 g 的時候
會在第二次捕獲的時候,從第一次捕獲的結尾開始查找
如果沒有找到會返回 null
當他返回 null 的時候,那么下一次的捕獲又會從索引 0 開始捕獲
由一個正則的特性
叫做懶惰性
正則的標識符
+ 標識符是寫在正則的后面的
1. g 表示全局的意思
// var reg = /\d{3}/
// var str = 'abcdefg123abcdefg234abcdefg456asdasd'
// var res = reg.exec(str)
// var res2 = reg.exec(str)
// console.log(res)
// console.log(res2)
// var reg = /\d{3}/g
// var str = 'abcdefg123abcdefg234abcdefg456asdasd'
// var res = reg.exec(str)
// var res2 = reg.exec(str)
// var res3 = reg.exec(str)
// var res4 = reg.exec(str)
// var res5 = reg.exec(str)
// console.log(res)
// console.log(res2)
// console.log(res3)
// console.log(res4)
// console.log(res5)
標識符
- 對正則的特殊修飾
1. g
+ 全部捕獲
+ 抵消正則的懶惰性
2. i
+ 忽略大小寫
+ 正則在檢測字符串的時候不管字母的大小寫
// var reg = /[a-z]/i
// var str = '1234A1234'
// var res = reg.test(str)
// console.log(res)
字符串和正則合作的方法
1. search()
語法: 字符串.search(正則)
返回值:
如果找到,返回的是字符片段開始的索引
如果沒有,就是返回 -1
2. match()
語法: 字符串.match(正則)
返回值:
當正則沒有全局標識符 g 的時候,和 exec 方法一樣
當正則有全局標識符 g 的時候,返回值是捕獲到的每一個內容(以一個數組的形式返回)
3. replace()
語法: 字符串.replace(正則)
返回值: 替換好的字符串
沒有全局標識符 g 的時候是只替換一個
有全局標識符 g 的時候,會全部替換