正則表達式漫筆

正則表達式

一向運用簡樸的正則表達式,碰到難點的就沒法簡約高效的寫出正則,故此整頓一篇須要影象運用的正則運用。

正則表達式作用

  • 婚配一個字符串的子字符串(子集),或許替代該字符串。

不得不提的String和reg的經常使用要領

  • codePointAt(pos) 要領:獲得字符的碼位。漢字能夠獲得完整的碼位
  • fromCodePoint() 要領:參數供應字符的碼位返回對應的字符
  • include() 要領: 假如檢測到指定文本就返回true,不然返回false。接收第二個參數為最先搜刮的指定索引值
  • startsWith() 要領: 假如在肇端位置檢測到指定文本就返回true,不然返回false。接收第二個參數為最先搜刮的指定索引值
  • endsWith() 要領: 從字符串末端往前婚配。假如在完畢部份檢測到指定文本返回true,不然返回false。接收第二個參數為最先搜刮的指定索引值
  • repeat()要領: "o".repeat(3) // ooo 示意反覆某個字符串指定次數
  • reg.test(str)要領: test()要領實行一個檢索,用來檢察正則表達式在指定的字符串(str)中是不是能被婚配。返回 true 或 false。
  • reg.exec(str)要領: 要領在一個指定字符串中實行一個搜刮婚配。找到返回一個效果數組或未找到 null。 返回的數組將完整婚配勝利的文本作為第一項,將正則括號里婚配勝利的作為數組填充到背面

    • 全局挪用和非全局挪用:全局挪用時,在婚配后,它將把RegExp實例的lastIndex屬性設置為婚配文本的末了一個字符的下一個位置,當 exec() 再也找不到婚配的文本時,它將返回null,並把lastIndex屬性重置為0
  • str.search(reg)要領: 實行正則表達式和 String對象之間的一個搜刮婚配。假如婚配勝利,則 search() 返回正則表達式在字符串中初次婚配項的索引,不然,返回 -1。與上面的reg.test()相似可推斷是不是存在某個正則形式

    • search() 要領不實行全局婚配,它將疏忽標誌g,它同時疏忽正則表達式對象的lastIndex屬性,而且老是從字符串的最先舉行檢索,這意味着它老是返回字符串的第一個婚配的位置
    • 假如傳入一個非正則表達式對象,則會運用 new RegExp(obj) 隱式地將其轉換為正則表達式對象。
  • str.match(reg)要領: 當一個字符串與一個正則表達式婚配時, match()要領檢索婚配項。

    • 參數:假如傳入一個非正則表達式對象,則會隱式地運用 new RegExp(obj) 將其轉換為一個reg
    • 參數:假如你未供應任何參數,直接運用 match() ,那末你會獲得一個包括空字符串的 Array :[“”] 。
    • 返回值:假如字符串婚配到了表達式,會返回一個數組,數組的第一項是舉行婚配完整的字符串,以後的項是用圓括號捕捉的效果。假如沒有婚配到,返回null
    • 全局挪用:全局婚配返回的數組的內容與非全局大不相同,它的數組元素中寄存的是字符串中一切的婚配子串,而且也沒有index屬性或input屬性
    • 非全局挪用:只在字符串中婚配順次,若沒有婚配到文本,match()返回null,婚配到返回一個數組,數組中第一個元素寄存婚配到的文本,其他的元素寄存的是與正則表達式的子表達式婚配的文本,數組具有兩個屬性,index ( 婚配文本的肇端字符在字符串位置 )和 input屬性
  • String.prototype.replace(reg, function): 是將婚配內容運用函數后返回一個新字符串。
  • String.prototype.split(reg): 以指定的分隔符字符串將一個String對象分割成字符串數組, 假如分隔符是("")則會每一個字符都切割。

    • 注重:當字符串為空時,split()返回一個包括一個空字符串的數組,而不是一個空數組,假如字符串和分隔符都是空字符串,則返回一個空數組。
  • Array.prototype.join()要領: join() 要領將一個數組(或一個類數組對象)的一切元素連接成一個字符串並返回這個字符串,不轉變原數組。

    • 參數: 指定一個字符串將數組的每一個元素以這個字符串拼接,()為空默以為,("")是引號時則元素之間沒有任何字符。這個要領經常和String.prototype.split()連用

一些經常使用的婚配字符

預定義類

字符集等價於
.[ ^ rn ]除了換行和回車符之外一切字符
\d[ 0-9 ]
\D[ ^ 0-9 ]
\s[ tvnr ]包括製表符、空格、垂直製表符
\S[ ^ tvnr ]
\w[a-zA-Z ]
\W[ ^ a-zA-Z ]

量詞

反覆潤飾符形貌示例
{n}指定n 次/d{5}/数字湧現5次
{n,}起碼n次/d{5,}/数字最少湧現5次
{n,m}n值m次
?最多一次,{0,1}
+起碼一次
*恣意次

邊境字符集

字符寄義
^以 xxx開首
$以 xxx末端
\b單詞邊境
\B非單詞邊境

正則語法

組織體式格局

  • const re1 = /\d/ 字面量語法 建立
  • const re2 = new RegExp(\d) 組織函數 建立

運用正則搜刮

str = "It will rain tomorrow"

//字符串在前
str.startWith("will") //true
str.endsWith("will") //true
str.includes("will") //true

str.match(/\w{3,}/g) // will rain tomorrow
str.search(/\w{3,}/g) // 3

//正則表達式在前

/\w{3,}/g.test(str) //true

....

經常使用用法

  • 經常使用潤飾符

g:global,全文搜刮,不增加的話搜刮到第一個效果住手搜刮

i:ingore case,疏忽大小寫,默許大小寫敏感

m:multiple lines,多行搜刮

  • \D 和 \S \W經常使用來去除不想要的
  • \D可用來去除不是数字的的字符

    比方: var yourNumber  = 'phoneNumber15555555555'
    var number.replace(/\D/,'')
  • \S 可用來確保必填字段中字符

    var username = '  daixixi '
    var value = /\S/.test(username)
  • 種種潤飾符時潤飾前一個元素湧現的次數

    var a = "hello world2hello china".match(/\w+/)
  • .婚配除了換行和回車符之外字符,能夠運用[/\s\S/]婚配一切字符
  • 分組 : 當某一個潤飾符對前一個元素舉行影響時,若想對一組有作用則運用分組 /(ab)+/ 婚配最少一組一連的ab
  • __或__: 運用豎線示意或,/a|b/ 示意婚配a或b(有個笑話就是這個|寫成中文的丨怎樣都查不出。。。)
  • 取反 :有限字符集之外的字符 /[^abc]/ 除abc之外字符
  • __局限__: 運用[a-z] 示意a到z 之間恣意一個
  • __字符類__:運用[]來構建一個簡樸的類,/[abc]/ 示意婚配个中恣意一個都可
  • 貪慾形式和非貪慾形式: 在設置了量詞后婚配是默許是貪慾形式會即以最大的量詞舉行婚配,不過在量詞背面加上?后就能夠取最小量詞舉行婚配,是不是婚配完畢平常取決於是不是加g

        '123456789'.match(/\d{3,5}/g); //["12345", "6789"]  
        '123456789'.match(/\d{3,5}?/g); //["123", "456", "789"]  
  • 分組嵌套:

    var str = '<a href="http://a.com">"網址"</a>'
    var reg = /href="((https?:)?\/\/.+?)"/
    console.log(str.match(reg))
    
    var url = str.match(reg)[1]
  • 前瞻:
表達式寄義
exp1(?=exp2)婚配背面是exp2的exp1
exp1(?!exp2)<span class=”Apple-tab-span” style=”white-space:pre”></span>婚配背面不是exp2的exp1

獲得是exp1的值,不過須要滿足前提才會被婚配中

    原文作者:戴西西
    原文地址: https://segmentfault.com/a/1190000014595592
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞