js正則基礎重識

經常使用的修飾符

i: ignoreCase 忽略大小寫匹配
    m: multiline 多行匹配
    g: global 全局匹配
複製代碼

經常使用特殊元字符

\d  是0-9之間的一個數字
    \D  非0-9之間的任意字符
    \w  '數字,字母,下劃線'中任意一個 >>[0-9a-zA-Z_]等價於\w
    \W  匹配除了'數字,字母,下劃線'中任意一個
    \s  匹配任意一個空白字符(包括\t製表符[TAb鍵四個空格] 換行符\n)
    \S  匹配除了空白字符 (空格 製表符\t 換行符)
    \b  匹配邊界符 'bai' (b左邊和i右邊就是邊界) 'bai-du'(b左邊,u右邊,i右邊,d左邊)
    \B  匹配除了邊界符
    \n  匹配一個換行符
    \   轉義字符(把一個普通字符轉譯爲特殊字符,例如:\d,把一個特殊含義的轉換爲普通意思,例如:\. 此外的.就不是任意字符,而是一個小數點。)
    .   不單單是小數點,表明除了\n之外的任意字符。
    ^   以某個元字符開頭
    $   以某個元字符結尾
    x|y  x或y中的任意一個
    [xyz]  x或y或z中的任意一個
    [^xyz]  除了x\y\z之外的任意字符 
    [a-z]   獲取a-z中的任意字符([0-9] 等價於\d ...)
    [^a-z]   除了a-z中的任意字符
    ()   正則分組
    (?:)  當前分組只匹配不捕獲
    (?=)  正向預查
    (?!)  負向預查
    量詞元字符:
        ?     表明出現01次
        *     表明出現0到屢次
        +     出現1到屢次
複製代碼
1.中括號中出現的元字符通常都是表明自己含義的
    2.中括號中出現的兩位數,不是兩位數,而是兩個數字中任意一個
    
    列:
    let reg = /^[18]$/; // 匹配1或者8開頭或者結尾的字符串
    console.log(reg.test('18')); // false
    console.log(reg.test('1'));  // true
    console.log(reg.test('8'));  // true
    
    let reg = /^[.]+$/;  // 匹配的就是一個到多個小數點
    let reg = /^.+$/;    // 匹配除了/n之外的任意字符
    console.log(reg.test('n')); // false
    console.log(reg.test('1')); // fasle
    console.log(reg.test('...')); // true
    
    let reg = /^[12-65]$/; // 1或者2-6或者5,不是12-65
    console.log(reg.test('13')); // false
    console.log(reg.test('65')); // false
    
    let reg = /^[\d]$/;  // \d在這裏依然是0-9之間的一個數字
    console.log(reg.test('0')); // true
    console.log(reg.test('d')); // false
複製代碼

正則分組捕獲

//分組做用
    //1.改變默認的優先級
    //2.分組捕獲
    //3.分組引用

    // 年齡 在18-65之間
    let reg = /^(1|[89])|([2-5]|\d)|(6[0-5])$/
    
    // 需求:編寫一個匹配 [Object, aaa]
    let reg = /^\[Object, .+\]$/
    
    let reg = /^(a-z)(a-z)\2\1$/; // 正則中出現的\1 表明和第一個分組出現的同樣的內容。。。
    console.log(reg.test('oppo'));
    
    // 身份證中的信息
    // '130826199102175313'
    // 130826 地域
    // 1991 02 17 出生年月日
    // 5313 倒數第二位:奇數:男 偶數:女
    let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{2})(\d)(\d|X)$/;
    console.log(reg.exec('130826199102175313'))
    // 輸出: [ '130826199102175313', '130826','1991','02','17','53','1','3',index: 0,input: '130826199102175313',groups: undefined ]
    // 正則捕獲使用的是正則中的EXEC方法
        // 1. 若是匹配獲取的結果是一個數組,若是不匹配結果是null。
        // 2. 若是咱們只在匹配的時候,想要獲取正則部分信息,咱們能夠把這部分使用小括號包起來,造成一個分組,這樣在捕獲的時候,不只能夠把匹配的信息捕獲到並且還單獨把小組匹配的信息也捕獲到(分組捕獲)。
        // 3.有時候寫小組不是爲了捕獲信息,只是爲了改變優先級或者進行分組引用,此時咱們能夠在分組前面加上'?:',表明只去匹配,可是不把這個分組內容捕獲。
複製代碼
相關文章
相關標籤/搜索