正則

正則方法

    search() 方法 用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串,并返回子串的起始位置。
    replace() 方法 用于在字符串中用一些字符替換另一些字符,或替換一個(gè)與正則表達(dá)式匹配的子串。
    test() 方法用于檢測一個(gè)字符串是否匹配某個(gè)模式,如果字符串中含有匹配的文本,則返回 true,否則返回 false。
    exec() 方法用于檢索字符串中的正則表達(dá)式的匹配。該函數(shù)返回一個(gè)數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配,則返回值為 null。
    split() 用來把一個(gè)字符串拆分為多個(gè)子串的String方法。
    match() 用來匹配一個(gè)字符串的String方法。

正則規(guī)則

  • 通常情況下正則會返回第一個(gè)匹配結(jié)果
        g   (意思是'global',全局), 返回一個(gè)包含所有匹配結(jié)果的數(shù)組 
    
  • 通常情況下正則匹配區(qū)分大小寫
        i   強(qiáng)制執(zhí)行一次不區(qū)分大小寫搜索
    
  • 英文.
        .   (英文句號),可以匹配任何一個(gè)單個(gè)字符、字母、數(shù)字、或者.本身。除了\符。
            可以連續(xù)出現(xiàn),也可以以間隔形式出現(xiàn)。 
    
  • 元字符
        \   (轉(zhuǎn)移符號)  這個(gè)符號有特殊含義,并不是字符本身的含義。
            [和] (匹配的字符集合)   只負(fù)責(zé)定義字符集合,字符集合的匹配結(jié)果是能夠與該集合里的任意一個(gè)成員相匹配的文本。  
    
  • -(連字符)
        -   [0-9] [a-z] [A-Z]
            不能[3-1]這樣寫
            只有寫在[和]里表示連接符,寫下其他地方只表示普通字符,所以不用轉(zhuǎn)義。 
    
  • 取非匹配[^]
        [^]     除去[]里匹配的字符 
        [^0-9]  匹配任何不是數(shù)字的字符
    
  • 空白字符串
        [\b]    回退(并刪除)一個(gè)字符
        \f      換頁符
        \n      換行符
        \r      回車符
        \t      制表符(Tab鍵)
        \v      垂直制表符
    
  • 字符類
        \d  任何一個(gè)數(shù)字字符
        \D  任何一個(gè)非數(shù)字字符
        \w  任何一個(gè)字母數(shù)字字符或下劃線字符
        \W  任何一個(gè)非字母數(shù)字字符或下劃線字符
        \s  任何一個(gè)空白字符
        \S  任何一個(gè)非空白字符
    
  • 匹配進(jìn)制
        \x  十六進(jìn)制前綴,\x0A對應(yīng)ASCII字符10(換行符),與\n一樣
        \0  八進(jìn)制前綴,\011對應(yīng)于ASCII字符9(制表符),與\t一樣
    

重復(fù)匹配

  • [+ ,* ,? ,]
        +   匹配一個(gè)或多個(gè)字符。
        [0-9+]  表示匹配0-9之間的數(shù)組和+號字符。
    
        *   匹配零個(gè)或多個(gè)字符。
    
        ?   只能匹配一個(gè)字符(或字符處理)的零次或一次出現(xiàn),只匹配前面的字符。
    
        {和}    可以設(shè)定重復(fù)次數(shù)??梢允侵貜?fù)的值,也可以是一個(gè)區(qū)間。
                {3}     剛好重復(fù)三次。
                {2,4}   重復(fù)2-4次。
                {2,}   至少重復(fù)兩次。
    

貪婪型元字符和對應(yīng)的懶惰型

  • 貪婪型元字符 匹配的越多越好

  • 對應(yīng)的懶惰型 只匹配一個(gè),適可而止

    貪婪型元字符 懶惰型元字符
    * *?
    + +?
    {n,} {n,}?

位置匹配

  • 單詞邊界
        \b  用來匹配一個(gè)單詞的開始或結(jié)尾,它匹配的位置是\w和\W之間的位置。
        \B  不匹配一個(gè)單詞邊界。
    
  • 字符串邊界
        ^   字符串開頭
        $   字符串結(jié)尾
    

子表達(dá)式

  • (和)
        (和)    會被視為獨(dú)立的元素
        (19|20) 19或20,|會把前后的看做一個(gè)整體
    

回溯引用

  • JS里使用\來標(biāo)識回溯引用(\與$配合進(jìn)行替換操作時(shí)例外)

        回溯引用指的是模式的后半部分引用在前半部分中定義的子表達(dá)式
    
        [ ]+(\w+)[ ]+\1     \1的內(nèi)容與(\w+)的一樣
    
    -   回溯引用只能用來引用模式里的子表達(dá)式(用(和)闊起來的正則表達(dá)式)
    -   回溯引用匹配通常從1開始計(jì)數(shù)(如\1、\2,等等)。\0可以用來代表整個(gè)正則表達(dá)式。
    -   回溯引用也有不足之處,添加或刪除子表達(dá)式,會使子表達(dá)式的相對位置改變。
    
  • 回溯中的替換操作

        $   $0代表整個(gè)正則匹配的
    
  • 大小寫轉(zhuǎn)換的元字符

    js好像沒用

    元字符 說明
    \E 結(jié)束\L或\U轉(zhuǎn)換
    \l 把下一個(gè)字符轉(zhuǎn)換成小寫
    \L 把\L到\E之間的字符全部轉(zhuǎn)換為小寫
    \u 把下一個(gè)字符轉(zhuǎn)換為大寫
    \U 把\U到\E之間的字符全部轉(zhuǎn)換為大寫
        var str = "<h1>abc</h1>"
        str1 = str.replace(/\<h1\>(.*?)\<\/h1\>/g,function(){
            let arr = [...arguments]
            console.log(arr);
            return arr[1].toUpperCase()
        });
        console.log(str1);
    

前后查找

  • 向前查找(向左查找)
        ?=  以?=開頭的子表達(dá)式,需要匹配的文本跟在=的后面。
            會返回結(jié)果,只是這個(gè)結(jié)果的字節(jié)長度永遠(yuǎn)是0。
            長度是可變的。
    
  • 向后查找
        ?<= 可以把<=看做箭頭,他指向文本閱讀方向的后方。
            只是固定長度。
    

  • 查找操作符

    操作符符 說 明
    (?=) 正向前查找
    (?!) 負(fù)向前查找
    (?<=) 正向后查找
    (?<!) 負(fù)向后查找
        支持向前查找的,一般都支持正向前查找和負(fù)向前查找。向后查找也是如此。
        負(fù)向查找實(shí)際上是取非的作用。
        (?=\$)\d    以$開頭的數(shù)字
        (?!\$)\d    不以$開頭的數(shù)字
    
  • 非捕獲性分組匹配

        ?:  非捕獲性分組工作模式下分組(?:)會作為匹配校驗(yàn),并出現(xiàn)在匹配結(jié)果字符里面,但不作為子匹配返回。
    
        捕獲性分組:會返回結(jié)果以及其他子表達(dá)式所匹配的結(jié)果集合
        非捕獲性分組:返回結(jié)果以及子表達(dá)式里沒有?:的結(jié)果集合
    

    例:

        var str1 = '000aaa111';  
        var pattern = /([a-z]+)(\d+)/;       // 捕獲性分組匹配
        var pattern2 = /(?:[a-z]+)(?:\d+)/;  // 非捕獲性分組匹配
    
        console.log(pattern.exec(str1))     // 捕獲性分組匹配結(jié)果    ['aaa111','aaa','111']
        console.log(pattern2.exec(str1))    // 非捕獲性分組匹配結(jié)果  ['aaa111']
    

插入條件

  • 回溯引用條件

    回溯引用條件只在一個(gè)前面的子表達(dá)式搜索成功的情況下才允許使用一個(gè)表達(dá)式。

        ?(1)    1代表第幾個(gè)子表達(dá)式(第幾個(gè)括號),0代表整個(gè)正則表達(dá)式
    
        var reg = /(<[Aa]\s*[^>]*>)(?(1)\s*<\/[Aa]>)/;
        只有第一個(gè)括號里有匹配結(jié)果,即?(1)有值,才會繼續(xù)它后面的匹配
    
  • 前后查找條件

    前后查找條件只有一個(gè)向前查找或向后查找取得成功的情況下才允許一個(gè)表達(dá)式被使用。

        ?(?=)   ()里放入前后查找表達(dá)式,當(dāng)前后查找表達(dá)式匹配到才繼續(xù)匹配。
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容