正則表達式

js正則表達式總結(jié)

  • 正則表達式的字符匹配

    量詞橫向模糊匹配

    var regex = /ab{2,5}/g

    g 表示全局匹配,意味著找到目標字符串中所有匹配的子串,若是不加的話,則只會找到第一個匹配的子串

    {m,n} 表示連續(xù)出現(xiàn)最少m次,最多n次

    {m,} 表示最少出現(xiàn)m次

    ? 等價于{0,1} 表示出現(xiàn)1次或者不出現(xiàn)

    + 等價于{1,} 表示最少出現(xiàn)1次

    * 表示出現(xiàn)任意次,有可能不出現(xiàn)

    量詞會有貪婪匹配和惰性匹配,
    一般情況下是貪婪匹配,盡量的想要的更多,比如{2,5}會盡量的去匹配5個,意味著想要一次性吃飽

    惰性匹配,雖然2到5次都行,但是當2個就夠的時候,就不在往下嘗試了,意味著有吃的就好,惰性匹配模式在量詞后面加個?就好,

    {m,n}?
    {m,}?
    ??
    +?
    *?
    

    字符組
    雖然是叫做字符組,但只是其中的一個字符,例如[abc],表示匹配一個字符,它可以是"a","b","c"之一

    [abc]表示一個除"a","b","c"之外的任意一個字符,字符組的第一位放,表示求反的概念

    \d 就是[0-9] 表示一位數(shù)字
    \D 就是[^0-9] 表示除數(shù)字之外的任意字符
    \w 就是[0-9a-zA-Z_] 表示數(shù)字大小寫字母和下劃線,也稱單詞字符
    \W 就是[^0-9a-zA-Z_] 表示任意一個非單詞字符
    \s 就是[ \t\v\n\r\f] 表示空白符
    \S 就是[^ \t\v\n\r\f] 表示任意一個非空白符
    . 通配符,任意一個字符
    

    也可以使用[\d\D],[\w\W],[\s\S],[^]表示任意一個字符

    多選分支

    多選分支可以支持多個子模式任選其一,形式如下:(p1|p2|p3)

    分支結(jié)構(gòu)也是惰性的,當p1匹配上時,就不會再去嘗試匹配p2,p3了

  • 正則表達式的位置匹配

    位置就是相鄰字符之間的地方,在正則中共有6個位置字符

    ^ 匹配開頭,在多行模式中匹配行開頭
    $ 匹配結(jié)尾,在多行模式中匹配行結(jié)尾
    \b 是單詞邊界,單詞與非單詞之間的位置,具體就是\w和\W之間的位置,\w與^之間的位置,\w與$之間的位置
    \B 表示非單詞邊界,就是這個位置兩邊要么都是單詞,要么都不是單詞,具體就是\w與\w,\W與\W ^與\W \W與$之間的位置
    (?=p) p表示一個子模式,即這個模式之前的位置,也就是說這個位置之后就是這個子模式的匹配結(jié)果
    (?!p) 這個位置之后不是子模式
    
  • 正則表達式括號的作用

    括號在正則中的作用如下

    分組和分支結(jié)構(gòu)
    捕獲分組
    反向引用
    非捕獲分組
    

    分組和分支結(jié)構(gòu)

    /(ab)+/
    括號提供分組的功能,是+作用于“ab”這個整體

    /^I Love (Javascript|regular Expression)$/
    括號組成了一個分支結(jié)構(gòu)

    引用分組
    有個引用分組,我們就可以進行數(shù)據(jù)提取,以及更強大的替換操作

    var regex = /(\d{4})-(\d{2})-(\d{2})/;
    var string = "2017-06-12";
    console.log( string.match(regex) );
    // ["2017-06-12", "2017", "06", "12", index: 0, input: "2017-06-12"]
    
    正則表達式后面沒有g的話,會返回匹配的子串以及各個分組,
    但是有g的話,只會返回匹配的子串,不會返回分組
    var regex = /(\d{4})-(\d{2})-(\d{2})/g;
    // ["2017-06-12"]
    
    替換
    var result = string.replace(regex, "$2/$3/$1");
    
    反向引用
    可以保證后面的模式與前面的一致
    var regex = /\d{4}(-|\/|\.)\d{2}\1\d{2}/;
    
    非捕獲分組
    只想要括號最原始的功能,但不會引用它,此時可以使用非捕獲分組(?:p),等于(p)
    
    • 正則表達式的幾種使用場景
      1,驗證
      regex.test(string)
      string.search(regex)
      string.match(regex)
      regex.exec(string)
      2,切分
      string.split(regex)
      3,提取
      string.match(regex) 正則不要加g
      regex.exec(string)
      4,替換
      string.replace(regex,function(){})
      "1234 2345 3456".replace(/(\d)\d{2}(\d)/g, function(match, $1, $2, index, input) {
           console.log([match, $1, $2, index, input]);
      });
      // => ["1234", "1", "4", 0, "1234 2345 3456"]
      // => ["2345", "2", "5", 5, "1234 2345 3456"]
      // => ["3456", "3", "6", 10, "1234 2345 3456"]
      

參考自JS正則表達式完整教程(略長)

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,222評論 0 20
  • #首先,python中的正則表達式大致分為以下幾部分: 元字符 模式 函數(shù) re 內(nèi)置對象用法 分組用法 環(huán)視用法...
    mapuboy閱讀 1,704評論 0 51
  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數(shù)字,標點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,271評論 0 9
  • 推薦幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,840評論 9 151
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術的BUG開發(fā)攻城獅閱讀 4,677評論 0 23

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