js-進階 正則表達式

正則表達式正則表達式

 

一、爲何須要正則表達式數組

 

由於咱們經常要對用戶輸入的字符串進行匹配,看用戶輸入是否符合咱們的要求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}

  • 至少出現1次,或者1次以上 至關於{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

相關文章
相關標籤/搜索