正則表達式正則表達式
一、爲何須要正則表達式數組
由於咱們經常要對用戶輸入的字符串進行匹配,看用戶輸入是否符合咱們的要求spa
二、什麼是正則表達式對象
所謂正則表達式,就是用於字符串中的 信息進行查找,替換和提取等操做。排序
建立正則表達式的方式,有兩種,字面量,對象建立字符串
字面量建立:console
語法:let parttern=/正則規則/模式修正符class
reg.test()test
對象建立:object
語法:let = new RegExp(」正則規則」,」模式修飾符」);
三、正則表達式的組成部分
若是是字面量建立正則的方式,正則能夠分爲4個部分:定界符//,原子at,元字符,模式修正符(前兩個必需要寫)
若是是對象方式建立的正則,那麼就由3個部分組成:原子、元字符、模式修正符
四、定界符
就是約定正則表達式開始和結束的地方,使用的是一個斜槓(/)
五、原子
原子就是普通的字符,換句話說,正則裏面寫了什麼原子,那麼字符串就必需要出現這個字符。
六、元字符
就是有特殊含義的字符(+*?)
七、模式修正符
對正則表達式進行必定的擴充
i就是一個模式修正符,它能夠忽略大小寫
正則表達式類型和數組相同,不管哪一種方式建立,返回類型都是object
元字符做爲原子
方法很簡單,元字符前面添加一個轉譯字符(\)
八、元字符具體符號
(1)字符組
使用方括號來進行表示。表明方括號裏面的原子出現一個便可
let reg=/[abcd]/;
console.log(reg.test(「acc」));
範圍:在字符組裏面,正則表達式使用一個-來表示範圍,能夠簡化字符組。
1.1 範圍按照的是ASCLL碼從小到大的排序,因此不能反着寫。
1.2 在一個字符組裏面能夠書寫多個範圍
1.3 -只有在字符組裏面才表明範圍,若是出了字符組,那表明它原來的意思
排除:主要用於字符組裏面,表明除了什麼以外,用來表示^來表示
【^ 0-9】
排除符號書寫在【後面,若是書寫的位置不在它後面,則不表明排除,而表明它原來的意思
(2) 簡記
對於0-9 ,a-z這種經常使用的,正則裏面提供了默認的簡單書寫方式
\d:等同於[0-9],用於匹配數字
\D:等同於[^0-9],匹配非數
let reg=/^\dab/;
\s:表明匹配空白字符
\S:匹配非空白字符
\w:匹配數字字母下劃線,等同於[0-9A-Za-z_]
\W:匹配非數字字母下劃線。等同於[^0-9A-Za-z_]
(3) 點符號
點是匹配除了回車,換行,製表符之外的任意字符
匹配任意字符: [\d\D] [\w\W] [\s\S]
(4) 量詞 (就是指的前面那個字符)
指定一個東西匹配多少次
{n} 匹配n次
{n.m}匹配至少n次,最多m次;
{n,}匹配至少n次
?能夠出現,也能夠不出現,至關於{0,1}
* 匹配0次或者屢次 至關於 {0, }
貪婪模式和懶惰模式
貪婪模式:默認狀況喜好,量詞的匹配都是貪婪模式,所謂貪婪,就是指能匹配多少個,就匹配多少個。(默認)
reg.exec(str);
懶惰模式:只要匹配上一個,就返回,後面的再也不進行匹配
開啓懶惰模式,只須要在量詞後面添加一個?便可
(5)括號
兩個功能:分組和引用
分組:就是將小原子組合成一個大的原子
let reg=/(ab){2}/;
捕獲:括號不只用於分組,還會保存每一個分組所匹配的文本。等到匹配完成以後,能夠引用捕獲到的文本,經過$數字,默認是9個,分別對應$1-$9
RegExp.$ 1.2.3….
let reg=/(\d{4})-(\d{2})-(\d{2})/;
console.log(reg.test("2017-11-20"));
console.log(RegExp.$1);
console.log(RegExp.$2);
console.log(RegExp.$3);
反向引用:首先,這個仍是和捕獲的內容有關。咱們能夠對捕獲的內容進行一個反向的引用,經過\數字來引用括號裏面的內容
let reg=/(ab)(cd)\2/;
console.log(reg.test("abcdcd"))//true
非捕獲(跳過某一個子表達式)使用?: 括號稱爲子表達式
let reg=/(?:ab)(cd)\1/;
console.log(reg.test("abcdcd"))//
()起始和結束****
若是是開始,使用^,若是是結束,使用$
let reg=/^\d{6}$/;
console.log(reg.test("610000"))
//匹配用戶名 字母開頭 5-8 長度不小於5
let reg=/^[a-z]\w{4,7}$/i;
選擇:或者 |
須要注意:選擇(|)的優先級是最低的,因此上看的正則匹配到的是ab或者cd,而不是a和b