第一部分 基礎知識
一、正則申明方式
1、構造函數方式
var reg = new RegExp('\d', 'gi');
修飾符 | 說明 |
---|---|
i | 忽略大小寫匹配 |
g | 全局匹配,即是匹配一個後繼續匹配,直到結束 |
m | 多行匹配,即是遇到換行後不停止匹配,直到結束 |
2、字面量方式
var reg = /\d/gi;
3.正則相關符號
3.1方括號 []
1)^ 在 [] 內開始位置及正則雙斜線開始位置有特殊含義,其他位置表示 ^ 字符本身.$符號與^符號相反,表示結尾
'adobe 2016'.match(/^[a-zA-Z]+/);
// ["adobe"]
'adobep'.match(/p$/)
// ["p"]
2)在 [] 內開始位置時,表示不匹配 [] 內除 ^ 以外的所有字符:
'adobe'.match(/[^abc]/g);
// ["d", "o", "e"]
3)- (連字符)表示左邊字符的 ASCII 值到右邊字符 ASCII 編碼值之間及左右字符自身的所有字符
'adobe PS 2016'.match(/[a-g]/g);
// ["a", "d", "b", "e"]
3.2、特殊含義字符
● . 匹配任意單個字符,除換行和結束符
'1+0.2*2=1.4'.match(/.{2}/g);
// ["1+", "0.", "2*", "2=", "1."]
● \w 匹配任意單詞字符(數字、字母、下劃線),等價於[A-Za-z0-9_]
'ad34~!@$ps'.match(/\w/g);
// ["a", "d", "3", "4", "p", "s"]
● \W 匹配任意單詞字符,與\w相反,等價於[^A-Za-z0-9_]
'ad34~!@$ps'.match(/\W/g);
// ["~", "!", "@", "$"]
● \d 匹配數字,等價於 [0-9]
'ps6'.match(/\d/g);
// ["6"]
● \D 匹配非數字,等價於 [0-9]'
'ps6'.match(/\D/g);
// ["p", "s"]
● \s 匹配空白字符,主要有(\n、\f、\r、\t、\v),注意'a\sb'中的\s依然是字符s,所以'a\sb'.match(/\s/g)返回 null
'adobe ps'.match(/\s/g);
// [" "]
● \S 匹配非空白字符,與\s相反
'adobe ps'.match(/\S/g);
// ["a", "d", "o", "b", "e", "p", "s"]
3.3、量詞說明
● n+ 匹配包含至少一個n的字符串
'adobe paas'.match(/a+\w+/g);
// ["adobe", "aas"]
n* 匹配包含零個或多個n的字符串
n? 匹配包含零個或一個n的字符串
n{x} 匹配包含連續x個n的字符串
n{x,y} 匹配包含至少連續x個且最多連續y個n的字符串
n{x,} 匹配包含至少連續x個n的字符串
表達式1 | 表達式2 |
---|---|
n+ | n{1,} |
n* | n{0,} |
n? | n{0,1} |
3.4 小括號 () 用法
1)捕獲用法
● 表示對匹配的字符串進行分組
'adobe cs9cs10, adobe cs11'.match(/([a-z]+\d+){1,2}/g)
//[ 'cs9cs10', 'cs11' ]
分組還有一個用法,替換字符串 ,$1,$2,$3 只是佔位符
var dateStr = '2018/04/18';
var reg = /(\d{4})\/(\d{2})\/(\d{2})/;
dateStr = dateStr.replace(reg, '$1-$2-$3') //"2018-04-18"
● 與|一起使用表示選擇性
"he is 12. she is 13. it's box".match(/(it|she|he)\s+is/g);
// ["he is", "she is"]
● 表示對匹配的字符串捕獲(正則在非全局(g)模式下)
'adobe cs9'.match(/[a-z]+(\d+)/);
// ["cs9", "9"]
//注意是cs9裏面中最後一個匹配的,比如
'adobe cs9f5'.match(/[a-z0-9]+(\d+)/)
//[ 'cs9f5', '5']
2)非捕獲用法,以(?)形式出現
● (?:n ) 表示非捕獲組(不會對匹配的字符串捕獲)
'adobe11ps15test'.match(/[a-z]+(1|3)+([a-z]+)/);
// ["adobe11ps", "1", "ps"]
//如果不想數組含有1,可以這樣
'adobe12ps15test'.match(/[a-z]+(?:\d+)([a-z]+)/);
// ["adobe12ps", "ps"]
● (?=n ) 匹配任何其後緊跟字符n的字符串,但返回中不包含n
'adobe12ps15test'.match(/[a-z]+(?=\d)/g);
// ["adobe", "ps"]
● (?!n ) 匹配任何其後沒有緊跟字符n的字符串,返回中不包含n
'adobe12ps15test'.match(/[a-z]+(?!\d)/g);
// ["adob", "p", "test"]
● (?<=n ) 匹配任何其前緊跟字符n的字符串,返回中不包含n
'adobe12ps15test'.match(/(?<=\d)[a-z]+/g);
// ["ps", "test"]
● (?<!n ) 匹配任何其前緊跟字符n的字符串,返回中不包含n
'adobe12ps15test'.match(/(?<!\d)[a-z]+/g);
// ["adobe", "s", "est"]
3.5對象方法
1) RegExp對象相關方法
2)String對象相關方法
4.注意
. * + 等特殊符號的含義在[]中括號中失效
4.常見的正則表達式
1.手機號:/^1[35678]/d{9}$/
2.郵箱:/^\w+@\w+\.\w{2,5}$/ 或者 /^[0-9a-zA-Z_-]+@[0-9a-zA-Z_-]+\.[0-9a-zA-Z_-]{2,5}$/
3.用戶名:/^[a-zA-Z0-9_-]{4,15}$/ 只能是字母數字下劃線橫槓,長度4-15位
4.密碼:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/ 至少含一個字母,數字 長度6-20位