JavaScript中的Regex總結__JAVA

來源:互聯網
上載者:User

定義Regex的方法 定義Regex的方法有兩種:建構函式定義和Regex直接量定義。例如:

var reg1 = new RegExp('\d{5, 11}'); // 通過建構函式定義var reg2 = /\d{5, 12}/; // 通過直接量定義
Regex直接量字元 \o:NUL字元(\u0000) \t:定位字元(\u0009) \n:分行符號(\u000A) \v:垂直定位字元(\u000B) \f:換頁符(\u000C) \r:斷行符號符(\u000D) \xnn:由十六進位數nn指定的拉丁字元,例如,\x0A等價於\n \uxxxx:由十六進位數xxxx指定的Unicode字元,例如\u0009等價於\t \cX:控制字元^X,例如,\cJ等價於分行符號\n Regex錨字元 ^:匹配字串的開頭,在多行檢索中,匹配一行的開頭 $:匹配字串的結尾,在多行檢索中,匹配一行的結尾 \b:匹配一個單詞的邊界,簡言之,就是位於字元\w和\W之間的位置,或位於字元\w和字串的開頭或者結尾之間的位置([\b]匹配的是退格符) \B:匹配非單詞邊界的位置 (?=p):零寬正向先行斷言,要求接下來的字元都與p匹配,但不能包括匹配p的那些字元 (。!p):零寬負向先行斷言,要求接下來的字串不與p匹配 Regex的字元類 [...]:方括弧內的任一字元 [^...]:不在方括弧內的任一字元 .:除分行符號和其他Unicode行終止符之外的任一字元 \w:任何ASCII字元組成的單詞,等價於[a-zA-Z0-9] \W:任何不是ASCII字元組成的單詞,等價於[^a-zA-Z0-9] \s:任何Unicode空白符 \S:任何非Unicode空白符的字元,注意\w和\S不同 \d:任何ASCII數字,等價於[0-9] \D:除了ASCII數字之外的任何字元,等價於[^0-9] [\b]:退格直接量(特例) Regex的重複字元文法 {n, m}:匹配前一項至少n次,但不能超過m次 {n, }:匹配前一項n次或者更多次 {n}:匹配前一項n次 ?:匹配前一項0次或者1次,也就是說前一項是可選的,等價於{0, 1} +:匹配前一項1次或多次,等價於{1, } *:匹配前一項0次或多次,等價於{0, } Regex的選擇、分組和引用字元 |:選擇,匹配的是該符號左邊的子運算式或右邊的子運算式 (…):組合,將幾個項組合為一個單元,這個單元可通過“*”、“+”、“?”和“|”等符號加以修飾,而且可以記住和這個組相匹配的字串以供此後的任何使用 (?: …):只組合,把項組合到一個單元,但是不記憶與改組相匹配的字元 \n:和第n個分組第一次匹配的字元相匹配,組是圓括弧中的子運算式(也有可能是嵌套的),組索引是從左至右的左括弧數,“(?:”形式的分組不編碼 Regex修飾符 i:執行不區分大小寫匹配 g:執行一個全域匹配,簡言之,即找到所有的匹配,而不是在找到第一個之後就停止 m:多行匹配模式,^匹配一行的開頭和字串的開頭,$匹配行的結尾和字串的結尾 用於模式比對的String方法 search():它的參數是一個Regex,返回第一個與之匹配的子串的起始位置,如果沒有匹配的子串就返回-1。如果search()的參數不是Regex,則首先會通過RegExp建構函式將它轉換為Regex,search()不支援全域檢索,因為它忽略修飾符g。如:
var s = "JavaScript".search(/script/i); // s = 4
replace():它用來執行檢索與替換。接收兩個參數,第一個是Regex,第二個是要進行替換的字串。Regex如果設定的修飾符g,則進行全域替換,否則只替換匹配的第一個子串。如果第一個參數不是Regex,則直接搜尋該字串,而不是將其轉換為Regex。如:
//code from http://caibaojian.com/javascript-zhengze.htmlvar s = "JavaScript".replace(/java/gi, "Script"); // s =  Script Script
match():它的參數是一個Regex,如果不是則通過RegExp轉換,返回的是一個由匹配結果組成的數組。如果設定了修飾符g則進行全域匹配。如:
var d = '55 ff 33 hh 77 tt'.match(/\d+/g); // d = ["55", "33", "77"]
split():這個方法用以將調用它的字串拆分為一個子串組成的數組,使用的分隔字元是split()的參數,它的參數也可以使一個Regex。如:
var d = '123,31,453,645'.split(','); // d = ["123", "31", "453", "645"]var d = '21 , 123,  44,  64,  67,  3'.split(/\s*,\s*/); // d = ["21", "123", "44", "64", "67", "3"]
RegExp對象 每個RegExp對象都有5個屬性。屬性source是一個唯讀字串,包含Regex的文本。屬性global是一個唯讀布爾值,用以說明這個Regex是否帶有修飾符g。屬性ignoreCase是一個唯讀布爾值,用以說明這個Regex是否帶有修飾符i。屬性multiline是一個唯讀布爾值,用以說明這個Regex是否帶有修飾符m。屬性lastIndex是一個可讀可寫的整數,如果匹配模式帶有g修飾符,這個屬性儲存區整個字串中下一次檢索的開始位置。 RegExp對象有兩個方法。exec()的參數是一個字串,它的功能與match()相似,exec()方法對一個指定的字串執行一個Regex,也就是在一個字串中執行匹配檢索。如果沒有找到任何匹配就返回null,找到了匹配就返回一個數組,這個數組的第一個元素包含的是與Regex相匹配的字串,餘下的元素是與圓括弧內的子運算式相匹配的子串,不論Regex是否有修飾符g,都會返回一樣的數組。當調用exec()的Regex對象具有修飾符g時,它將把當前Regex對象的lastIndex屬性設定為緊挨著匹配子串的字元位置。當同一個Regex第二次調用exec()時,它將從lastIndex屬性所指示的字串處開始檢索,如果exec()沒有發現任何匹配結果,它會將lastIndex重設為0。如:
var p = /Java/g;var text = "JavaScript is more fun than Java!"var r;while((r = p.exec(text)) != null) {       console.log(r, 'lastIndex: ' + p.lastIndex);}
另外一個方法是test(),它的參數是一個字串,用test()對某個字串進行檢查,如果包含Regex的一個匹配結果,則返回true否則返回false。如:
var p = /java/i;p.test('javascript'); // true
原文連結: JavaScript中的Regex總結 著作權,轉載時請註明出處,違者必究。
註明出處格式:前端開發部落格 ( http://caibaojian.com/javascript-zhengze.html)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.