JavaScript備忘錄(3)——正則表達式

正則表達式是用來進行字符串匹配的。git

定義正則表達式有兩種方法:/wor/或者new RegExp("wor")。正則表達式

使用方法數組

在JS中,使用正則表達式的方法有:spa

  • 字符串的search方法:"hello".search(/e/)返回1。(以0開始的索引,若是未匹配到,返回-1)
  • 字符串的match方法:"hello".match(/e/)返回["e"]。(表示匹配到的字符串,若未匹配,返回空數組)
  • 正則表達式對象的test方法:(/e/).test("hello")返回true。(表示匹配了)
  • 正則表達式對象的exec方法:(/e/).exec("hello")返回["e"]。(表示匹配到的字符串,若未匹配,返回空數組)

字符

  • 字符自己表示該字符,好比/w/匹配字符w,如"world".search(/w/)返回0。
  • \b表示單詞的起始和結束位置。好比/\bme\b/能夠匹配"me too!",但不能匹配"media player"。
  • \d表示任意數字(digital)。
  • \w表示任意字母,數字或下劃線(word)。
  • \s表示任意單個空格或製表符(space)。兩個空格必須由兩個\s匹配,好比"hi  you".match(/\b\s\s\b/)返回["  "](注意有兩個空格),而"hi  you".match(/\b\s\b/)返回null。
  • .(點符號)匹配除了換行符的任意字符。
  • ^表示整個字符串的開頭。
  • $表示整個字符串的結尾。
  • \B,\D,\W,\S,表示\b,\d,\w,\s的逆:非單詞起始或結束位置,非數字,等等。
  • \\,\.,\^,\$等表示轉義,如\^表示實際的字符"^"而不是字符串開頭。
  • []中添加字符表示匹配其中的任一個字符,好比[abc]或[a-c]能夠匹配字母a,b或者c,例如"banana".match(/[a-c]/g)返回["b","a","a","a"]。
  • []中的^表示反義,好比/[^abc]/表示任意不是a,b或者c的字符,例如"abgbac".match(/[^abc]/)返回["g"],"fref<afr><frf>.match(/<a[^>]+>/)返回["<afr>"],其含義爲「尖括號內以a開頭的字符串(包括尖括號)」。

重複

某一個匹配重複了若干次,有如下三種表達:對象

  • {n},表示元素重複了n此。如"hi3456good".match(/\d{3}/)會返回["345"],匹配了索引從2開始的3個數字。
  • {n,m},表示元素重複了n到m次。如"hi3456good".match(/\d{2,10}/)返回["3456"],由於任意數字出現了2到10次(這裏是4次)。
  • {n,},表示元素至少重複了n次。如"hi3456good".match(/\d{2,}/)返回["3456"]。
  • *,表示重複任意次(包括零次),等同於{0,},如"higood".match(/hi\d*good/)返回["higood"]。
  • +,表示重複一次或更多,等同於{1,},如"higood".match(/hi\d+good/)返回null。
  • ?,表示重複零次或一次,等同於{0,1}。

分支

用|建立分支條件:索引

  • 好比"hello Joey".match(/hi|hello/)返回["hello"],"hi Joey".match(/hi|hello/)返回"hi"。
  • 好比,匹配一個0~255之間的數(在匹配IP地址時經常使用到):/2[0-4]\d|25[0-5]|[01]?\d\d?/。

分組

用()分組,提升運算優先級:字符串

  • 好比,/^(\d{3}[a-z])*$/.test("123x456y789z")返回true。

使用分組時,會給組別分配組名,並使用\<組名>的形式匹配相同的文本:it

好比,/(\b\w+\b)/能夠匹配任意一個單詞,那麼/(\b\w+\b)\s+\1/就能夠匹配中間帶有空格的兩個同樣的單詞,如"go go"。test

JS不支持方法

斷言

斷言用來匹配「出如今……以前」或者「出如今……以後」的字符。其格式爲(?=exp)或相似的格式。好比:

"going and watching".match(/\b\w+(?=ing\b)/g);其返回["go", "watch"]。

JS不支持負向零寬斷言(即出如今……以後)的狀況。

相關文章
相關標籤/搜索