JavaScript基礎(八) --- 正則

1. 什麼是正則

 1. 正則只和字符串有關,換言之正則只和字符串打交道;
 2. 正則用來操作(匹配和捕獲)字符串的一系列規則;
    匹配:判斷你是否符合我的規則: 返回值:布爾值; test
    捕獲:把符合我們規則的內容拎出來; 拿到的:字符串;

2. 正則的定義

 正則創建的兩種方式:字面量 和 實例
    兩種創建方式的區別:
      1)實例創建時,特殊含義的字符需要轉義(\);
      2)實例創建可以進行變量的拼接,但是字面量方式創建,不能拼接變量;

 var reg=/\d/;                      // 字面量創建
 var reg=new RegExp('^'+str+'$');   // 實例創建

3. 正則由兩部分組成:元字符 和 修飾符

元字符包含:代表特殊意義的元字符 和 代表次數的量詞元字符
   1. 代表特殊意義的元字符:
        \  ----  轉義字符
        |  ----  或
        () ----  分組
        .  ----  除了\n以外的其他字符
        \n ----  換行(一般用在控制檯的換行)
        \b ----  開頭結尾和空格
        ^
        $

        \d 數字     \w 數字字母下劃線      \s 空格
        \D 非數字   \W 非數字字母下劃線     \S 非空格

        [abc] abc三個中的任何一個      [^abc] 除了abc這三個的任何一個
        [a-z] 字母中的任何一個         [^a-z] 非字母
   2. 代表次數的量詞元字符:
        *       0到多
        +       1到多
        ?      0次或1次;
        {n}     正好幾次
        {n,}    至少n次
        {n,m}   n次到m次
修飾符:
        g       全局 global
        i       忽略大小寫
        m       換行操作

4. 常用的正則判斷

 1. 有效電話號碼
    var reg = /^1/d{10}$/;
 2. 身份證號碼
    var reg = /^(\d{17})(\d|X)$/;      // 最後一位有可能是X
    var reg = /^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(\d{2})(\d)(\d|X)$/ 
 3. 23或者24
    var reg = /^(23|24)$/              // 用到或的時候一定要加()
 4. 年齡在18~67歲之間
    var reg = /^(18|19)|([2-5]\d)|(6[0-7])$/;
 5. 去除數位空格
    var reg = /(^ +)|( +$)/;
 6. 非空驗證
    var reg = /^\s+$/;
 7. 郵箱驗證
    var reg = /^([\w.-]+)@([0-9a-zA-Z]+)(\.[a-zA-Z]{2,4}){1,2}$/
 8. 中文名字
    var reg = /^[\u4e00-\u9fa5]{1,4}$/      // 基本漢字的Unicode碼範圍:    4E00-9FA5
 9. 偷小說:
    var reg=/<[^<>]+>/g;

5. 工作中遇到的正則

1. 密碼匹配: 要求8~30位,同時包含:大寫字母、小寫字母、數組的字符串
/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]*$/

2. 8 - 30 個字符,必須同時包含三項(大寫字母、小寫字母、數字、 ()`~!@#$%^&amp;*-+=|{}[]:;'&lt;&gt;,.?/ 中的特殊符號)。
/(?=^.{8,30}$)(?!^[\d\W_]*$)(?!^[\da-z]*$)(?!^[\dA-Z]*$)(?!^[\W_a-z]*$)(?!^[\W_A-Z]*$)(?!^[a-zA-Z]*$).*$/

6. 正則捕獲的特點:

 1. 懶惰性:解決辦法-用全局g;
    eg:每次都是從索引0開始查找;
    用了全局g,lastIndex每次查找都是從找到內容的下一個元素的索引開始查找;

 2. 貪婪性:解決辦法-用?

7. 懶惰性

每一次執行exec只捕獲第一個匹配的內容,在不進行任何處理的情況下,在執行多次捕獲,捕獲的還是第一個匹配的內容。
例子:

var  reg = /\d+/;
var str = 'qweasd2016qazwsx2017';

var res = reg.exec(str);
console.log(res) // ['2016',index:6,input:'qweasd2016qazwsx2017']
//第二次通過exec捕獲的內容還是第一個"2016"
var res = reg.exec(str);
console.log(res) // ['2016',index:5,input:'qweasd2016qazwsx2017']

解決的方法: — g

var reg = /\d/g;
var str = 'woshi2016ni2017';
console.log(reg.lastIndex)     // 0
console.log(reg.exec(str))     // ["2", index: 5, input: "qweasd2016qazwsx2017"]

8. 貪婪性

貪婪性 正則的每一次捕獲都是按照匹配最長的結果捕獲的,例如:2符合正則、2015也符合正則,我們默認捕獲的是2015
例子:

var reg = /\d+/g;
var str = 'as2015xs2016er2017';
console.log(reg.exec(str));   //["2015", index: 2, input: "as2015xs2016er2017"]

解決辦法: —– ?

var reg = /\d+?/g;
var str = 'as2015xs2016er2017';
console.log(reg.exec(str));  // ["2", index: 2, input: "as2015xs2016er2017"] 
發佈了32 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章