宇宙級正則表達式教程,請注意查收

嚴肅而鄭重的介紹

正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),能夠用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。正則表達式

一個字符串中要匹配 is ,這時候,咱們須要頁面中只要是有is的單詞也會被匹配,\bis\b意思是,is先後含有單詞邊界。express

路徑中,如http://.*.jpg 匹配全部以http開頭,文件名和路徑隨意,.jpg結尾的路徑名稱。 分組的概念:(http://.*.jpg) 獲取匹配到的值 $1數組

再例如時間日期:\d{4}/\d{2}/\d{2},其中{...}表示量詞,這時候,有時/是-,那麼要進行或邏輯[/-]表示或 改善之後的正則:\d{4}[/-]\d{2}\d{2}函數

在JavaScript中實例化一個正則對象兩種方式

  • 字面量:/\bis\b/gi
  • 構造函數:new RegExp(\bis\b,'gi');

修飾符

  • g,全局進行查找,若是不指定該修飾符,則會匹配到第一個知足條件的元素後返回
  • i,忽略大小寫
  • m,multiple lines 多行搜索

元字符

  • 原意文本字符 a b c 就直接匹配字母
  • 元字符 \b \t等 有特殊含義的字符\b匹配 單詞邊界
  • 幾個特殊字符: * + ? $ ^ | \ () {} [] \t(水平製表符) \v(垂直製表符) \n(換行符) \r(回車符) \0(空字符) \f(換頁符) \cX(與X對應的控制字符[ctrl+x])

字符類

引入:咱們有時想匹配一個幾個字母,ab\t -> ab+tab,但有時,咱們想要泛指匹配某一類字符,這時候就須要類的概念,可使用元字符[]來構建一個簡單的類,a1b1c1d1.replace(/[abc]/g,'YES');好比:YES1YES2YES3d4(只匹配a或b或c)測試

字符取反,a1b1c1d1.replace(/[^abc]/g,'YES');好比:aYESbYES...(除了abc,其餘所有匹配)prototype

範圍類

  • 字母 [a-zA-Z]
  • 數字 [0-9]
  • [-/]

預約義類及邊界

  • . == [^\r\n] 除了回車和換行符之外的全部字符
  • \d == [0-9] 數字
  • \D == [^0-9] 非數字
  • \s == [\t\n\x0b\f\r] 空白字符
  • \S == [^\t\n\x0b\f\r] 非空字符
  • \w == [a-zA-Z_0-9] 單詞字符
  • \W == [^a-zA-Z_0-9] 非單詞字符

量詞

量詞放置在{}中3d

  • ?(最多出現一次)
  • +(至少出現一次)
  • *(出現任意次-->這個必定要注意,和Linux不同,他只是一個量詞,不是想Linux中表示任意的字符,正則中任意字符用"."表示)
  • {n} {n,m} {n,}

貪婪模式與非貪婪模式對象

  • \d{1,5} 他會盡量多的去匹配,這叫作貪婪模式匹配,若是咱們不想這樣,引入一個非貪婪模式概念
  • \d{1,5}? 在量詞後邊兒加"?"

分組

分組放置於()中,這個很好理解,就像是數學中的運算,將括號中的元素當成一個總體.hello{2} --> helloo ; (hello){2} -->hellohello;(a|b|c|d)索引

  • 反向引用:就是在結果中但願使用咱們的分組中的原始結果,$1,$2分別表示第一個分組,第二個分組...
  • 忽略分組:固然又有了第二個問題,有些咱們只是起一個優先計算或者做爲總體的目的而並不想做爲一個分組group,只用加上 (?:)

前瞻、後顧(js不支持後顧)

符合和不符合特定斷言的稱爲(確定/正向)匹配和(否認/負向)匹配ip

  • 正向前瞻 exp(?=assert)
  • 正向後顧 exp(?<=assert)
  • 負向前瞻 exp(?!assert)
  • 負向後顧 exp(?<!assert)

前瞻是向後看,這一點不少人會比較犯糊塗,例如: \d{2}(?=\w{2}) 匹配形如 12aa中的aa.

JavaScript中RegExp對象

對象屬性:global(g) ignore case(i) multiline(m)默認值全是false。

  • lastIndex:當前表達式匹配內容的最後一個字符的下一個位置,在非全局g下,始終返回0.
  • source:正則表達式的文本字符串 \w 那麼reg.source就是 \w,這些屬性是隻讀的.

對象的方法

  • RegExp.prototype.test()
  • RegExp.prototype.exec()

test(): /\w/ 若是加上g參數,不停console.log(reg.test('ab')),第三次會錯 這就是lastIndex在做怪,1 , 2.其實咱們測試時,沒有必要g,弄明白每一個元素座標位置

exec(): /\d(\w)/ 匹配上會返回一個結果數組,第一個參數返回匹配結果,後面參數依次是子表達式所匹配的內容,就是咱們以前使用的$1,$2... res.index 返回每結果的索引

字符串與之類似方法

String.prototype.search(reg): 檢索知足正則的第一個子表達式,search忽略 g 標誌,始終從頭開始返回最前一個 String.prototype.match(reg): 非全局調用,返回值和RegExp的exec所返回的一致 忽略 g lastIndex返回0,有兩個屬性: index和input屬性

String.prototype.split(reg)

String.prototype.replace(str/reg,repStr)

String.prototype.replace(str/reg,function(a,b,c,d){})

  • a:匹配字符串
  • b:正則表達式分組內容,沒有分組則沒有該參數,有的話 分組存在多個 則該參數有多個
  • c:匹配項在字符串中的index
  • d:元字符串
相關文章
相關標籤/搜索