JavaScript 正則表達式

概述:
  在一篇文章中,當要查找一個字符串(由多個字符組成)或者一個字符時,在搜索框中輸入,而後進行搜 索,就可獲得結果。
  可是,當你查找一些複雜格式的字符串時,好比,查找如下字符串時,以"m"開頭,緊接着兩個任意 字符,再緊接着一個"n"字符
  ,這時,在搜索框中咱們如何輸入搜索字符串?經過鍵盤敲入第一個字符"m"後,緊接着的任意兩個字 符,如何敲入?
  這個,嗯,嗯,嗯。。。。,咱們就會卡殼了。這時候,咱們就要使用正則表達式進行 搜索。
  正則表達式能夠對任意字符串進行搜索、替換等操做。git


元字符(metacharacters):
  \ : the backslash
  ^ : the caret
  $ : the dollar sign
  . : the period or dot
  | : the vertical bar or pipe symbol
  ? : the question mark
  * : the asterisk or star
  + : the plus sign
  ( : the opening parenthesis
  ) : the closinig parenthesis
  [ : the opening square bracket
  ] : the closing square bracket
  { : the opening curly brace
  } : the closing curly brace正則表達式

  以上特殊的字符被稱爲元字符,在正則表達式中有着特殊的意義。若是你想在文本中這搜索這些元字符,
  那麼必須在元字符前面添加反斜線( \ ),來告訴正則表達式引擎,把元字符做爲普通字符對待。例如:
    你要查找:1+1=2,那麼你的正則表達式就要寫成:1\+1=2curl


"." 句點元字符
  只匹配一個字符。這個字符幾乎是任意一個字符,好比字母、標點符號、數字、下劃線等,同時也不區分 大小寫。
  注意,不匹配換行符 "\n", 而且句點字符與 "*" 或者 "+"字符寫在一塊兒時,搜索引擎會進行貪婪匹 配。
    也就是說它會匹配儘量的字符,這有可能與你的預期不符。測試

"\w" 元字符(小寫)
  只匹配一個字符。這個字符是字母、數字和下劃線。
  注意,不匹配 標點符號、空白符號
"\W" 元字符(大寫)
  只匹配一個字符。這個字符是 \w 不匹配的字符,意思與 \w 相反。換句話說,就是匹配任何非字母、 非數字、非下劃線的字符搜索引擎

"\d" 元字符(小寫)
  只匹配一個字符。這個字符是 0 到 9 的數字。url

"\D" 元字符(大寫)
  只匹配一個字符。這個字符是 \d 不匹配的字符,意思與 \d 相反。換句話說,就是匹配任何非數字的 字符
"\s" 元字符(小寫)
  只匹配一個字符。這個字符是空白字符,包括一個空格符( )、一個製表符(\t)、一個換行符(\n)
"\S" 元字符(小寫)
  只匹配一個字符。這個字符是 \s 不匹配的字符,意思與 \s 相反,也就是非空白字符spa


字符類(Character Classes or Character Sets)
  字符類就是使用"[]"括起來的一些無序字符,正則表達式引擎在匹配時,從字符類中把一個一個字符抽出對象

  來進行匹配。假如表達式爲:Mo[eao]n,那麼搜索引擎就會以 "Moen" 或者 "Moan" 或者 "Moon"進行 模式匹配。
  字符類有一些簡寫形式,表示某一個範圍的字符,這些字符必須是連續的,好比:
    [a-z]表示小寫字母 a 到 z,意思與 [abcdefghijklmnopqrstuvwxyz]等價
    [r-t]表示小寫字母 r 到 t,意思與 [rst]等價
    [A-Z]表示小寫字母 A 到 Z,意思與 [ABCDEFGHIJKLMNOPQRSTUVWXYZ]等價
    [0-9]表示數字,意思與 [0123456789]等價blog


"^" 元字符
  當"^" 元字符出如今字符類的第一個位置時,表示取反的意思,例如:
  [^acm] ,表示匹配非 a 或 c 或 m 的字符。
  當"^" 元字符出如今字符類的其餘位置時,表示普通的"^"字符,例如:
  [a^cm] ,表示匹配 a 或 ^ 或 c 或 m 的字符。
  當"^" 元字符出如今非字符類時,表示匹配一個字符串或一行的開始位置
"$" 元字符
  匹配一個字符串或一行的結束位置
"\b" 元字符
  匹配一個單詞的邊界(出如今一個單詞的開始或者結束位置)
"\<" 和 "\>" 元字符
  匹配一個單詞的開始和結束位置
"()"分組介紹
  使用小括號"(abc)、(abc|abcdg)"括起來的字符串就稱爲一個分組。索引

  分組有一些隱式變量($一、$二、$3 等),可供隨後的替換、重複等操做使用,例如:
  正則表達式爲:"((\w(\d{2}))(( )(\d{2})))"
  搜索的文本內容爲:"A22 33"
  那麼執行匹配以後的結果以下:
    $1, 引用的分組爲 "((\w(\d{2}))(( )(\d{2})))" , 匹配結果爲:"A22 33"
    $2, 引用的分組爲 "(\w(\d{2}))", 匹配結果爲:"A22"
    $3, 引用的分組爲 "(\d{2})", 匹配結果爲:"22"
    $4, 引用的分組爲 "(( )(\d{2}))", 匹配結果爲:" 33"
    $5, 引用的分組爲 "( )", 匹配結果爲:" "
    $6, 引用的分組爲 "(\d{2})", 匹配結果爲:"33"
反向引用在分組中的應用
  有時候須要查找重複單詞的操做,這時候就須要反向引用操做。反向引用,意思是引用前面匹配的分組。
  例如:"M(o)\1n lig(h|e)t",第一個分組是"(o)",其後的 "\1" 表示反響引用第一個分組的匹配結果
  反向引用的格式:一個反斜線加一個數字,好比 "\2" 表示引用第二個分組
"?:" 在分組中的應用
  表示正則表達式引擎在返回最終的匹配結果時,刪除"?:"所在分組的匹配結果。去掉不須要的匹配項。
  例如,"(The)(?:[ea])(on)",匹配的結果以下,
    $1, 引用的分組爲 "(The)"
    $2, 引用的分組爲 "(on)"
向前查找和向後查找
  注意,此應用的關鍵在於,出如今指定匹配項以後的字符序列不會被正則表達式引擎返回。
  (?: ...) , 非捕獲組
  (?= ...) , 確定式向前查找
  (?! ...) , 否認式向前查找
  (?<= ...) , 確定式向後查找
  (?<! ...) , 否認式向後查找
POSIX 字符類,[:alnum:] 等價於 [A-Za-z0-9],[:digit:] 等價於 [0-9], JS 中不支持此寫法

JavaScript 支持的元字符
    
JavaScript 正則表達式有兩種寫法
  
一、 var reg = new RegExp(param1[, param2]);
    param1 參數表示正則表達式的模式
    param2 參數是可選的,值爲「gmi」中的一個或者多個,
    g 表示 global, 進行全局匹配
    m 表示 multiline,進行多行匹配
    i 表示 ignoreCase, 匹配時不區分大小寫
  二、var reg = /[abc]{3}/[gmi];


JavaScript 正則表達式對象的主要方法
  一、test()
    測試一個字符串是否與模式匹配?只要存在一次匹配就返回 true;沒有匹配項返回 false;
  二、exec()
    從一個字符串中獲取匹配項。
JavaScript 中的 string 對象有三個方法與正則表達式配合使用   一、match()     獲取匹配項,與 exec()方法功能相同   二、search()     查找是否存在匹配項?與 test() 方法功能相同   三、replace() 有兩個參數,     第一個參數是 RegExp 對象,     第二個參數是一個字符串,用來替換查找出來的匹配項

相關文章
相關標籤/搜索