正則表達式能夠:
•測試字符串的某個模式。例如,能夠對一個輸入字符串進行測試,看在該字符串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱爲數據有效性驗證
•替換文本。能夠在文檔中使用一個正則表達式來標識特定文字,而後能夠所有將其刪除,或者替換爲別的文字
•根據模式匹配從字符串中提取一個子字符串。能夠用來在文本或輸入字段中查找特定文字
正則表達式語法
一個正則表達式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱爲元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式做爲一個模板,將某個字符模式與所搜索的字符串進行匹配。
建立正則表達式 javascript
RegExp構造函數第一個參數爲正則表達式的文本內容,而第一個參數則爲可選項標誌.標誌能夠組合使用
•g (全文查找)
•i (忽略大小寫)
•m (多行查找)
java
正則表達式還有另外一種正則表達式字面量的聲明方式 正則表達式
和正則表達式相關的方法和屬性
正則表達式對象的方法
•test,返回一個 Boolean 值,它指出在被查找的字符串中是否存在模式。若是存在則返回 true,不然就返回 false。
•exec,用正則表達式模式在字符串中運行查找,並返回包<script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/themes/advanced/langs/zh.js"></script><script type="text/javascript" src="http://www.iteye.com/javascripts/tinymce/plugins/javaeye/langs/zh.js"></script>含該查找結果的一個數組。
•compile,把正則表達式編譯爲內部格式,從而執行得更快。
正則表達式對象的屬性
•source,返回正則表達式模式的文本的複本。只讀。
•lastIndex,返回字符位置,它是被查找字符串中下一次成功匹配的開始位置。
•$1...$9,返回九個在模式匹配期間找到的、最近保存的部分。只讀。
•input ($_),返回執行規範表述查找的字符串。只讀。
•lastMatch ($&),返回任何正則表達式搜索過程當中的最後匹配的字符。只讀。
•lastParen ($+),若是有的話,返回任何正則表達式查找過程當中最後括的子匹配。只讀。
•leftContext ($`),返回被查找的字符串中從字符串開始位置到最後匹配以前的位置之間的字符。只讀。
•rightContext ($'),返回被搜索的字符串中從最後一個匹配位置開始到字符串結尾之間的字符。只讀。
String對象一些和正則表達式相關的方法
•match,找到一個或多個正則表達式的匹配。
•replace,替換與正則表達式匹配的子串。
•search,檢索與正則表達式相匹配的值。
•split,把字符串分割爲字符串數組。
測試正則表達式是如何工做的! 數組
固然,僅僅知道了字符串是否匹配模式還不夠,咱們還須要知道哪些字符匹配了模式
函數
更復雜的用法,使用子匹配 測試
注意,當字符串不匹配re時,exec方法將返回null
String對象的一些和正則表達式有關的方法 編碼
注意,當search方法沒有找到匹配時,將返回-1
相似於exec方法,String對象的match方法也用於將字符串與正則表達式進行匹配並返回結果數組
spa
RegExp對象實例的一些屬性 code
每一個RegExp對象的實例具備lastIndex屬性,它是被查找字符串中下一次成功匹配的開始位置,默認值是-1。 lastIndex 屬性被 RegExp 對象的 exec 和 test 方法修改.而且它是可寫的. 對象
當匹配失敗(後面沒有匹配),或lastIndex值大於字符串長度時,再執行exec等方法會將lastIndex設爲0(開始位置)
RegExp對象的靜態屬性
multiline屬性返回正則表達式是否使用多行模式,這個屬性不針對某個正則表達式實例,而是針對全部正則表達式,而且這個屬性可寫.(IE與Opera不支持這個屬性)
使用元字符注意事項:元字符是正則表達式的一部分,當咱們要匹配正則表達式自己時,必須對這些元字符轉義.下面是正則表達式用到的全部元字符
( [ { \ ^ $ | ) ? * + .
使用RegExp構造函數與使用正則表達式字面量建立正則表達式注意點
既然雙重轉義這麼不友好,因此仍是用正則表達式字面量的聲明方式
如何在正則表達式中使用特殊字符?
另處,還有一些其它的預約義特殊字符,以下表所示:
字符 描述
\n 換行符
\r 回車符
\t 製表符
\f 換頁符(Tab)
\cX 與X對應的控制字符
\b 退格符(BackSpace)
\v 垂直製表符
\0 空字符("")
字符類 ---〉簡單類,反向類,範圍類,組合類,預約義類
下面是正則表達式中的預約義類
代碼 等同於 匹配
. IE下[^\n],其它[^\n\r] 匹配除換行符以外的任何一個字符
\d [0-9] 匹配數字
\D [^0-9] 匹配非數字字符
\s [ \n\r\t\f\x0B] 匹配一個空白字符
\S [^ \n\r\t\f\x0B] 匹配一個非空白字符
\w [a-zA-Z0-9_] 匹配字母數字和下劃線
\W [^a-zA-Z0-9_] 匹配除字母數字下劃線以外的字符
量詞(下表量詞單個出現時皆是貪婪量詞)
代碼 描述
* 匹配前面的子表達式零次或屢次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等價於{0,}。
+ 匹配前面的子表達式一次或屢次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
? 匹配前面的子表達式零次或一次。例如,"do(es)?" 能夠匹配 "do" 或 "does" 中的"do" 。? 等價於 {0,1}。
{n} n 是一個非負整數。匹配肯定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',可是能匹配 "food" 中的兩個 o。
{n,} n 是一個非負整數。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的全部 o。'o{1,}' 等價於 'o+'。'o{0,}' 則等價於 'o*'。
{n,m} m 和 n 均爲非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。劉, "o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。
貪婪量詞與惰性量詞
•用貪婪量詞進行匹配時,它首先會將整會字符串當成一個匹配,若是匹配的話就退出,若是不匹配,就截去最後一個字符進行匹配,若是不匹配,繼續將最後一個字符截去進行匹配,直到有匹配爲止。直到如今咱們遇到的量詞都是貪婪量詞
•用惰性量詞進行匹配時,它首先將第一個字符當成一個匹配,若是成功則退出,若是失敗,則測試前兩個字符,依些增長,直到遇到合適的匹配爲止
惰性量詞僅僅在貪婪量詞後面加個"?"而已,如"a+"是貪婪匹配的,"a+?"則是惰性的
多行模式
分組與非捕獲性分組
候選(也就是所說的「或」)
當包含分組的正則表達式進行過test,match,search這些方法以後,每一個分組都被放在一個特殊的地方以備未來使用,這些存儲是分組中的特殊值,咱們稱之爲反向引用
使用反向引用能夠要求字符串中某幾個位置上的字符必須相同.另外,在replace這類方法中可用特殊字符序列來表示反向引用
其它——〉正向前瞻,用來捕獲出如今特定字符以前的字符,只有當字符後面跟着某個特定字符纔去捕獲它。與正向前瞻對應的有負向前瞻,它用匹配只有當字符後面不跟着某個特定字符時纔去匹配它。在執行前瞻和負向前瞻之類的運算時,正則表達式引擎會留意字符串後面的部分,然而卻不移動index
構建一個驗證電子郵箱地址有效性的正則表達式。電子郵箱地址有效性要求(咱們姑且這樣定義):用戶名只能包含字母數字以及下劃線,最少一位,最多25位,用戶名後面緊跟@,後面是域名,域名名稱要求只能包含字母數字和減號(-),而且不能以減號開頭或結尾,而後後面是域名後綴(能夠有多個),域名後綴必須是點號連上2-4位英文字母