JS正則表達式大全(整理詳細且實用)

原文地址:http://www.jb51.net/article/43190.htmjava

JS正則表達式大全(整理詳細且實用)。須要的朋友能夠過來參考下,但願對你們有所幫助正則表達式

正則表達式中的特殊字符函數

字符 含意spa

\ 作爲轉意,即一般在"\"後面的字符不按原來意義解釋,如/b/匹配字符"b",當b前面加了反斜杆後/\b/,轉意爲匹配一個單詞的邊界。 
-或- 
對正則表達式功能字符的還原,如"*"匹配它前面元字符0次或屢次,/a*/將匹配a,aa,aaa,加了"\"後,/a\*/將只匹配"a*"。 

^ 匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a" 
$ 匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A" 
* 匹配前面元字符0次或屢次,/ba*/將匹配b,ba,baa,baaa 
+ 匹配前面元字符1次或屢次,/ba*/將匹配ba,baa,baaa 
? 匹配前面元字符0次或1次,/ba*/將匹配b,ba 
(x) 匹配x保存x在名爲$1...$9的變量中 
x|y 匹配x或y 
{n} 精確匹配n次 
{n,} 匹配n次以上 
{n,m} 匹配n-m次 
[xyz] 字符集(character set),匹配這個集合中的任一一個字符(或元字符) 
[^xyz] 不匹配這個集合中的任何一個字符 
[\b] 匹配一個退格符 
\b 匹配一個單詞的邊界 
\B 匹配一個單詞的非邊界 
\cX 這兒,X是一個控制符,/\cM/匹配Ctrl-M 
\d 匹配一個字數字符,/\d/ = /[0-9]/ 
\D 匹配一個非字數字符,/\D/ = /[^0-9]/ 
\n 匹配一個換行符 
\r 匹配一個回車符 
\s 匹配一個空白字符,包括\n,\r,\f,\t,\v等 
\S 匹配一個非空白字符,等於/[^\n\f\r\t\v]/ 
\t 匹配一個製表符 
\v 匹配一個重直製表符 
\w 匹配一個能夠組成單詞的字符(alphanumeric,這是個人意譯,含數字),包括下劃線,如[\w]匹配"$5.98"中的5,等於[a-zA-Z0-9] 
\W 匹配一個不能夠組成單詞的字符,如[\W]匹配"$5.98"中的$,等於[^a-zA-Z0-9]。.net

正則表達式是一個描述字符模式的對象。 
JavaScript的RegExp對象和String對象定義了使用正則表達式來執行強大的模式匹配和文本檢索與替換函數的方法.htm

在JavaScript中,正則表達式是由一個RegExp對象表示的.固然,可使用一個RegExp()構造函數來建立RegExp對象, 
也能夠用JavaScript 1.2中的新添加的一個特殊語法來建立RegExp對象.就像字符串直接量被定義爲包含在引號內的字符同樣, 
正則表達式直接量也被定義爲包含在一對斜槓(/)之間的字符.因此,JavaScript可能會包含以下的代碼:對象

var pattern = /s$/;blog

這行代碼建立一個新的RegExp對象,並將它賦給變量parttern.這個特殊的RegExp對象和全部以字母"s"結尾的字符串都匹配.用RegExp()也能夠定義
一個等價的正則表達式,代碼以下:ip

var pattern = new RegExp("s$");字符串

不管是用正則表達式直接量仍是用構造函數RegExp(),建立一個RegExp對象都是比較容易的.較爲困難的任務是用正則表達式語法來描述字符的模式. 
JavaScript採用的是Perl語言正則表達式語法的一個至關完整的子集.

正則表達式的模式規範是由一系列字符構成的.大多數字符(包括全部字母數字字符)描述的都是按照字面意思進行匹配的字符.這樣說來,正則表達式/java/就和全部包含子串 "java" 的字符串相匹配.雖然正則表達式中的其它字符不是按照字面意思進行匹配的,但它們都具備特殊的意義.正則表達式 /s$/ 包含兩個字符. 第一個特殊字符 "s" 是按照字面意思與自身相匹配.第二個字符 "$" 是一個特殊字符,它所匹配的是字符串的結尾.因此正則表達式 /s$/ 匹配的就是以字母 "s" 結尾的字符串.

1.直接量字符

咱們已經發現了,在正則表達式中全部的字母字符和數字都是按照字面意思與自身相匹配的.JavaScript的正則表達式還經過以反斜槓(\)開頭的轉義序列支持某些非字母字符.例如,序列 "\n" 在字符串中匹配的是一個直接量換行符.在正則表達式中,許多標點符號都有特殊的含義.下面是這些字符和它們的含義:

正則表達式的直接量字符

字符 匹配 
________________________________

字母數字字符 自身 
\ f 換頁符 
\ n 換行符 
\ r 回車 
\ t 製表符 
\ v 垂直製表符 
\ / 一個 / 直接量 
\ \ 一個 \ 直接量 
\ . 一個 . 直接量 
\ * 一個 * 直接量 
\ + 一個 + 直接量 
\ ? 一個 ? 直接量 
\ | 一個 | 直接量 
\ ( 一個 ( 直接量 
\ ) 一個 ) 直接量 
\ [ 一個 [ 直接量 
\ ] 一個 ] 直接量 
\ { 一個 { 直接量 
\ } 一個 } 直接量 
\ XXX 由十進制數 XXX 指 定的ASCII碼字符 
\ Xnn 由十六進制數 nn 指定的ASCII碼字符 
\ cX 控制字符^X. 例如, \cI等價於 \t, \cJ等價於 \n

___________________________________________________

若是想在正則表達式中使用特殊的標點符號,必須在它們以前加上一個 "\" .

2.字符類

將單獨的直接符放進中括號內就能夠組合成字符類.一個字符類和它所包含的任何一個字符都匹配,因此正則表達式 / [abc] / 和字母 "a" , "b" , "c" 中的任何一個都匹配.另外還能夠定義否認字符類,這些類匹配的是除那些包含在中括號以內的字符外的全部字符.定義否認字符尖時,要將一個 ^ 符號做爲從左中括號算起的第一個字符.正則表達式的集合是 / [a-zA-z0-9] / .

因爲某些字符類很是經常使用,因此JavaScript的正則表達式語法包含一些特殊字符和轉義序列來表示這些經常使用的類.例如, \s 匹配的是空格符,製表符和其它空白符, \s 匹配的則是空白符以外的任何字符.

正則表灰式的字符類

字符 匹配 
____________________________________________________

[...] 位於括號以內的任意字符 
[^...] 不在括號之中的任意字符     onkeyup="value=value.replace(/[^\d^\.]+/g,'')"    非數字非點替換爲空
. 除了換行符以外的任意字符,等價於[^\n] 
\w 任何單字字符, 等價於[a-zA-Z0-9] 
\W 任何非單字字符,等價於[^a-zA-Z0-9] 
\s 任何空白符,等價於[\ t \ n \ r \ f \ v] 
\S 任何非空白符,等價於[^\ t \ n \ r \ f \ v] 
\d 任何數字,等價於[0-9] 
\D 除了數字以外的任何字符,等價於[^0-9] 
[\b] 一個退格直接量(特例) 
________________________________________________________________

3.複製

用以上的正則表式的語法,能夠把兩位數描述成 / \ d \ d /,把四位數描述成 / \d \ d \ d \ d /.但咱們尚未一種方法能夠用來描述具備任意多數位的數字或者是一個字符串.這個串由三個字符以及跟隨在字母以後的一位數字構成.這些複雜的模式使用的正則表達式語法指定了該表達式中每一個元素要重複出現的次數.

指定複製的字符老是出如今它們所做用的模式後面.因爲某種複製類型至關經常使用.因此有一些特殊的字符專門用於表示它們.例如: +號匹配的就是複製前一模式一次或屢次的模式.下面的表列出了複製語法.先看一個例子:

/\d{2, 4}/ //匹配2到4間的數字.

/\w{3} \d?/ //匹配三個單字字符和一個任意的數字.

/\s+java\s+/ //匹配字符串"java" ,而且該串先後能夠有一個或多個空格.

/[^"] * / //匹配零個或多個非引號字符.


正則表達式的複製字符

字符 含義 
__________________________________________________________________

{n, m} 匹配前一項至少n次,可是不能超過m次 
{n, } 匹配前一項n次,或者屢次 
{n} 匹配前一項剛好n次 
? 匹配前一項0次或1次,也就是說前一項是可選的. 等價於 {0, 1} 
+ 匹配前一項1次或屢次,等價於{1,} 
* 匹配前一項0次或屢次.等價於{0,} 
___________________________________________________________________


4.選擇,分組和引用

正則表達式的語法還包括指定選擇項,對子表達式分組和引用前一子表達式的特殊字符.字符| 用於分隔供選擇的字符.例如: /ab|cd|ef/ 匹配的是字符串 "ab",或者是字符串 "cd",又或者 "ef". /\d{3}|[a-z]{4}/ 匹配的是要麼是一個三位數,要麼是四個小寫字母.在正則表達式中括號具備幾種做用.它的主要做用是把單獨的項目分組成子表達式,以即可以像處理一個獨立的單元那種用 *、+或? 來處理那些項目.例如: /java(script) ?/ 匹配的是字符串 "java",其後既能夠有 "script",也能夠沒有. /

(ab|cd) + |ef) / 匹配的既能夠是字符串 "ef",也能夠是字符串"ab" 或者 "cd" 的一次或屢次重複.

在正則表達式中,括號的第二個用途是在完整的模式中定義子模式。當一個正則表達式成功地和目標字符串相匹配時,能夠從目標串中抽出和括號中的子模式相匹配的部分.例如,假定咱們正在檢索的模式是一個或多個字母后面跟隨一位或多位數字,那麼咱們可使用模式 / [a-z] + \ d+/.可是因爲假定咱們真正關心的是每一個匹配尾部的數字,那麼若是咱們將模式的數字部分放在括號中 (/ [a-z] + (\d+)/) ,咱們就能夠從所檢索到的任何匹配中抽取數字了,以後咱們會對此進行解析的.

代括號的子表達式的另外一個用途是,容許咱們在同一正則表達式的後面引用前面的子表達式.這是經過在字符串 \ 後加一位或多位數字來實現的.數字指的是代括號的子表達式在正則表達式中的位置.例如: \1 引用的是第一個代括號的子表達式. \3 引用的是第三個代括號的子表達式.注意,因爲子表達式能夠嵌套在其它子表達式中,

因此它的位置是被計數的左括號的位置.

例如:在下面的正則表達式被指定爲 \2: 
/([Jj]ava([Ss]cript)) \sis \s (fun\w*) /


對正則表達式中前一子表達式的引用所指定的並非那個子表達式的模式,而是與那個模式相匹配的文本.這樣,引用就不僅是幫助你輸入正則表達式的重複部分的快

捷方式了,它還實施了一條規約,那就是一個字符串各個分離的部分包含的是徹底相同的字符.例如:下面的正則表達式匹配的就是位於單引號或雙引號以內的全部字符.可是,它要求開始和結束的引號匹配(例如兩個都是雙引號或者都是單引號): 
/[' "] [^ ' "]*[' "]/


若是要求開始和結束的引號匹配,咱們可使用以下的引用: 
/( [' "] ) [^ ' "] * \1/


\1匹配的是第一個代括號的子表達式所匹配的模式.在這個例子中,它實施了一種規約,那就是開始的引號必須和結束的引號相匹配.注意,若是反斜槓後跟隨的數字比代括號的子表達式數多,那麼它就會被解析爲一個十進制的轉義序列,而不是一個引用.你能夠堅持使用完整的三個字符來表示轉義序列,這們就能夠避免混淆了.例如, 使用 \044,而不是\44.下面是正則表達式的選擇、分組和引用字符:

字符 含義 
____________________________________________________________________

| 選擇.匹配的要麼是該符號左邊的子表達式,要麼它右邊的子表達式 
(...) 分組.將幾個項目分爲一個單元.這個單元可由 *、+、?和|等符號使用,並且還能夠記住和這個組匹配的字符以供此後引

用使用 \n 和第n個分組所匹配的字符相匹配.分組是括號中的子表達式(多是嵌套的).分組號是從左到右計數的左括號數 ____________________________________________________________________

相關文章
相關標籤/搜索