版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、JS 正則表達式從入門到精通精通精通 JS 正則表達式精通 JS 正則表達式,講的比較詳細,學習正則表達式的朋友可以參考下。正則表達式可以:?測試字符串的某個模式。例如,可以對一個輸入字符串進行測試,看在該字符串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為數(shù)據(jù)有效性驗證?替換文本??梢栽谖臋n中使用一個正則表達式來標識特定文字,然后可以全部將其刪除,或者替換為別的文字?根據(jù)模式匹配從字符串中提取一個子字符串。可以用來在文本或輸入字段中查找特定文字正則表達式語法一個正則表達式就是由普通字符(例如字符a 到 z)以及特殊字符(稱為元字符)組成的文字模式。 該模式描述在查找文字主體時待匹配的一
2、個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。創(chuàng)建正則表達式復制代碼代碼如下 :var re = newRegExp();/RegExp是一個對象 ,和 Aarray 一樣/但這樣沒有任何效果, 需要將正則表達式的內容作為字符串傳遞進去re =newRegExp("a");/最簡單的正則表達式,將匹配字母are=newRegExp("a","i");/第二個參數(shù) ,表示匹配時不分大小寫RegExp構造函數(shù)第一個參數(shù)為正則表達式的文本內容,而第一個參數(shù)則為可選項標志.標志可以組合使用?g (全文查找)1
3、/20JS 正則表達式從入門到精通精通?i (忽略大小寫)?m (多行查找)復制代碼代碼如下 :var re = newRegExp("a","gi");/匹配所有的a 或 A正則表達式還有另一種正則表達式字面量的聲明方式復制代碼代碼如下 :var re = /a/gi;和正則表達式相關的方法和屬性正則表達式對象的方法?test,返回一個Boolean值,它指出在被查找的字符串中是否存在模式。如果存在則返回true ,否則就返回false 。?exec, 用正則表達式模式在字符串中運行查找,并返回包<scripttype="text/ja
4、vascript"src=""></script><scripttype="text/javascript"src=""></script>含該查找結果的一個數(shù)組。?compile, 把正則表達式編譯為內部格式,從而執(zhí)行得更快。正則表達式對象的屬性?source, 返回正則表達式模式的文本的復本。只讀。?lastIndex, 返回字符位置,它是被查找字符串中下一次成功匹配的開始位置。?$1.$9, 返回九個在模式匹配期間找到的、最近保存的部分。只讀。?input ($_), 返回執(zhí)行
5、規(guī)范表述查找的字符串。只讀。?lastMatch($&), 返回任何正則表達式搜索過程中的最后匹配的字符。只讀。?lastParen($+), 如果有的話,返回任何正則表達式查找過程中最后括的子匹配。只讀。?leftContext($), 返回被查找的字符串中從字符串開始位置到最后匹配之前的位置之間的字2/20JS 正則表達式從入門到精通精通符。只讀。?rightContext($'), 返回被搜索的字符串中從最后一個匹配位置開始到字符串結尾之間的字符。只讀。String 對象一些和正則表達式相關的方法?match, 找到一個或多個正則表達式的匹配。?replace, 替換與正
6、則表達式匹配的子串。?search, 檢索與正則表達式相匹配的值。?split, 把字符串分割為字符串數(shù)組。測試正則表達式是如何工作的!復制代碼代碼如下 :/test 方法 , 測試字符串 , 符合模式時返回true, 否則返回falsevar re = /he/;/ 最簡單的正則表達式,將匹配 he 這個單詞var str = "he"alert(re.test(str);/truestr = "we"alert(re.test(str);/falsestr = "HE"alert(re.test(str);/false,大寫 ,如
7、果要大小寫都匹配可以指定i 標志 (i 是 ignoreCase或 case-insensitive的表示 )re = /he/i;alert(re.test(str);/truestr = "Certainly!Helovesher!"alert(re.test(str);/true,只要包含he(HE) 就符合 ,如果要只是he 或 HE, 不能有其它字符,則可使用 和$3/20JS 正則表達式從入門到精通精通re = /he/i;/ 脫字符 () 代表字符開始位置alert(re.test(str);/false,因為 he 不在 str 最開始str = "
8、;Heis a goodboy!"alert(re.test(str);/true,He是字符開始位置,還需要使用 $re = /he$/i;/$ 表示字符結束位置alert(re.test(str);/falsestr = "He"alert(re.test(str);/true/當然 ,這樣不能發(fā)現(xiàn)正則表達式有多強大,因為我們完全可以在上面的例子中使用=或 indexOfre = /s/;/s 匹配任何空白字符,包括空格、制表符、換頁符等等str="userName"/ 用戶名包含空格alert(re.test(str);/truestr
9、= "userName"/ 用戶名包含制表符alert(re.test(str);/truere=/a-z/i;/ 匹配指定范圍內的任意字符,這里將匹配英文字母,不區(qū)分大小寫str="variableName"/變量名必須以字母開頭alert(re.test(str);/truestr="123abc"alert(re.test(str);/false當然 ,僅僅知道了字符串是否匹配模式還不夠, 我們還需要知道哪些字符匹配了模式復制代碼代碼如下 :var osVersion= "Ubuntu8"/ 其中的 8 表示
10、系統(tǒng)主版本號4/20JS 正則表達式從入門到精通精通var re = /a-z+s+d+$/i;/+ 號表示字符至少要出現(xiàn)1 次,s 表示空白字符,d 表示一個數(shù)字alert(re.test(osVersion);/true,但我們想知道主版本號/另一個方法exec, 返回一個數(shù)組 ,數(shù)組的第一個元素為完整的匹配內容re=/a-z+s+d+$/i;arr = re.exec(osVersion);alert(arr0);/ 將 osVersion完整輸出 ,因為整個字符串剛好匹配re/我只需要取出數(shù)字re=/d+/;var arr = re.exec(osVersion);alert(arr0
11、);/8更復雜的用法 , 使用子匹配復制代碼代碼如下 :/exec 返回的數(shù)組第1 到 n 元素中包含的是匹配中出現(xiàn)的任意一個子匹配re=/a-z+s+(d+)$/i;/用 () 來創(chuàng)建子匹配arr =re.exec(osVersion);alert(arr0);/ 整個 osVersion, 也就是正則表達式的完整匹配alert(arr1);/8,第一個子匹配 ,事實也可以這樣取出主版本號alert(arr.length);/2osVersion= "Ubuntu8.10"/ 取出主版本號和次版本號re = /a-z+s+(d+).(d+)$/i;/.是正則表達式元字符之
12、一,若要用它的字面意義須轉義arr = re.exec(osVersion);alert(arr0);/ 完整的 osVersion5/20JS 正則表達式從入門到精通精通alert(arr1);/8alert(arr2);/10注意 ,當字符串不匹配re 時,exec 方法將返回nullString 對象的一些和正則表達式有關的方法復制代碼代碼如下 :/replace方法 ,用于替換字符串var str ="somemoney"alert(str.replace("some","much");/muchmoney/replace的第
13、一個參數(shù)可以為正則表達式var re = /s/;/ 空白字符alert(str.replace(re,"%");/some%money/在不知道字符串中有多少空白字符時,正則表達式極為方便str ="somesometsometf"re = /s+/;alert(str.replace(re,"#");/但這樣只會將第一次出現(xiàn)的一堆空白字符替換掉/因為一個正則表達式只能進行一次匹配,s+ 匹配了第一個空格后就退出了re = /s+/g;/g, 全局標志 ,將使正則表達式匹配整個字符串alert(str.replace(re,&quo
14、t;");/somesomesomevar str = "ADF9DF9DF9",/那個文本文件中的字符串;re = /9/gi,/ 匹配 9counter= 0; / 計數(shù)器var newstr=str = str.replace(re,function()counter+;/每出現(xiàn)一次匹配,函數(shù)就被執(zhí)行一次, 函數(shù)的返回值用來替換原值6/20JS 正則表達式從入門到精通精通return"#");alert(" 替換次數(shù) : "+counter);/alert(str);/最后 str 變成ADF#DF#DF#"
15、var str = " 他今年 22 歲,她今年20 歲,他的爸爸今年45 歲,她的爸爸今年44 歲,一共有4人"function test($1) vargyear=(newDate().getYear()- parseInt($1) + 1;return$1+"(" +gyear + "年出生 )"/ varreg=newRegExp("()歲 ","g");varreg =/(d+) 歲 /gi;varnewstr=str.replace(reg,test);/alert(str);/al
16、ert(newstr);/另一個與之相似的是splitvar str = "a-bd-c"var arr = str.split("-");/ 返回 "a","bd","c"/如果 str 是用戶輸入的,他可能輸入a-bd-c 也可能輸入a bd c 或 a_bd_c, 但不會是 abdc( 這樣就說他輸錯了)str = "a_db-c"/ 用戶以他喜歡的方式加分隔符sre=/a-z/i;/ 前面我們說 表示字符開始,但在 里它表示一個負字符集/匹配任何不在指定范圍內的任意字
17、符,這里將匹配除字母處的所有字符arr = str.split(re);/ 仍返回 "a","bd","c"7/20JS 正則表達式從入門到精通精通/在字符串中查找時我們常用indexOf, 與之對應用于正則查找的方法是searchstr = "Myage is 18.Goldenage!"/ 年齡不是一定的, 我們用 indexOf 不能查找它的位置re = /d+/;alert(str.search(re);/返回查找到的字符串開始下標10/注意 ,因為查找本身就是出現(xiàn)第一次就立即返回,所以無需在search
18、時使用 g 標志/下面的代碼雖然不出錯,但 g 標志是多余的re=/d+/g;alert(str.search(re);/仍然是 10類似于 exec 方法 ,String 對象的 match 方法也用于將字符串與正則表達式進行匹配并返回結果數(shù)組復制代碼代碼如下 :var str = "Mynameis CJ.Helloeveryone!"var re = /A-Z/;/ 匹配所有大寫字母var arr = str.match(re);/返回數(shù)組alert(arr);/ 數(shù)組中只會包含一個M, 因為我們沒有使用全局匹配re = /A-Z/g;arr = str.match(
19、re);alert(arr);/M,C,J,H/從字符串中抽取單詞re = /ba-z*b/gi;/b表示單詞邊界str = "onetwothreefour"alert(str.match(re);/one,two,three,four8/20JS 正則表達式從入門到精通精通RegExp對象實例的一些屬性復制代碼代碼如下 :var re = /a-z/i;alert(re.source);/將 a-z 字符串輸出/請注意 ,直接 alert(re) 會將正則表達式連同前向斜線與標志輸出,這是 re.toString方法定義的var re = /a-z/i;alert(re
20、.source);/將 a-z 字符串輸出/請注意 ,直接 alert(re) 會將正則表達式連同前向斜線與標志輸出,這是 re.toString方法定義的每個 RegExp 對象的實例具有l(wèi)astIndex 屬性 , 它是被查找字符串中下一次成功匹配的開始位置, 默認值是 -1 。 lastIndex屬性被RegExp對象的exec和 test方法修改 .并且它是可寫的.復制代碼代碼如下 :var re = /A-Z/;/exec 方法執(zhí)行后 , 修改了 re 的 lastIndex屬性 ,var str = "Hello,World!"var arr = re.exec
21、(str);alert(re.lastIndex);/0,因為沒有設置全局標志re = /A-Z/g;9/20JS 正則表達式從入門到精通精通arr = re.exec(str);alert(re.lastIndex);/1arr = re.exec(str);alert(re.lastIndex);/7當匹配失?。ê竺鏇]有匹配),或lastIndex值大于字符串長度時,再執(zhí)行exec 等方法會將 lastIndex 設為 0( 開始位置 )復制代碼代碼如下 :var re = /A-Z/;var str = "Hello,World!"re.lastIndex= 120;
22、var arr = re.exec(str);alert(re.lastIndex);/0RegExp對象的靜態(tài)屬性復制代碼代碼如下 :/input最后用于匹配的字符串(傳遞給test,exec方法的字符串)var re = /A-Z/;var str = "Hello,World!"var arr = re.exec(str);alert(RegExp.input);/Hello,World!re.exec("tempstr");alert(RegExp.input);/仍然是 Hello,World!,因為 tempstr 不匹配10/20JS 正則
23、表達式從入門到精通精通/lastMatch最后匹配的字符re = /a-z/g;str = "hi"re.test(str);alert(RegExp.lastMatch);/hre.test(str);alert(RegExp"$&");/i,$& 是 lastMatch的短名字, 但由于它不是合法變量名,所以要。/lastParen最后匹配的分組re = /a-z(d+)/gi;str = "Class1Class2Class3"re.test(str);alert(RegExp.lastParen);/1re.t
24、est(str);alert(RegExp"$+");/2/leftContext返回被查找的字符串中從字符串開始位置到最后匹配之前的位置之間的字符/rigthContext返回被搜索的字符串中從最后一個匹配位置開始到字符串結尾之間的字符re = /A-Z/g;str = "123ABC456"re.test(str);alert(RegExp.leftContext);/123alert(RegExp.rightContext);/BC456re.test(str);alert(RegExp"$");/123Aalert(RegEx
25、p"$'");/C45611/20JS 正則表達式從入門到精通精通multiline 屬性返回正則表達式是否使用多行模式,這個屬性不針對某個正則表達式實例,而是針對所有正則表達式,并且這個屬性可寫.(IE 與 Opera 不支持這個屬性)復制代碼代碼如下 :alert(RegExp.multiline);/因為 IE , Opera 不支持這個屬性,所以最好還是單獨指定var re = /w+/m;alert(re.multiline);alert(RegExp"$*");/RegExp對象的靜態(tài)屬性不會因為給RegExp某個對象實例指定了m標志
26、而改變RegExp.multiline= true;/ 這將打開所有正則表達式實例的多行匹配模式alert(RegExp.multiline);使用元字符注意事項:元字符是正則表達式的一部分,當我們要匹配正則表達式本身時,必須對這些元字符轉義.下面是正則表達式用到的所有元字符($|)?*+.復制代碼代碼如下 :var str = "?"var re = /?/;alert(re.test(str);/出錯,因為?是元字符,必須轉義re = /?/;alert(re.test(str);/true12/20JS 正則表達式從入門到精通精通使用 RegExp 構造函數(shù)與使用正則
27、表達式字面量創(chuàng)建正則表達式注意點復制代碼代碼如下 :var str = "?"alert(str);/ 只會輸出 ?var re = /?/;/ 將匹配 ?alert(re.test(str);/truere = newRegExp("?");/出錯 ,因為這相當于re = /?/re = newRegExp("?");/正確,將匹配?alert(re.test(str);/true既然雙重轉義這么不友好,所以還是用正則表達式字面量的聲明方式如何在正則表達式中使用特殊字符?復制代碼代碼如下 :/ASCII 方式用十六進制數(shù)來表示特殊字
28、符var re = /x43x4A$/;/將匹配 CJalert(re.test("CJ");/true/也可使用八進制方式re = /103112$/;/將匹配 CJalert(re.test("CJ");/true/還可以使用Unicode 編碼re =/u0043u004A$/;/ 使用 Unicode ,必須使用 u 開頭,接著是字符編碼的四位16 進制13/20JS 正則表達式從入門到精通精通表現(xiàn)形式alert(re.test("CJ");另處,還有一些其它的預定義特殊字符,如下表所示:字符描述n 換行符r 回車符t 制表符
29、f 換頁符( Tab )cX 與 X 對應的控制字符b 退格符 (BackSpace)v 垂直制表符0 空字符 ("")字符類-簡單類,反向類,范圍類,組合類,預定義類復制代碼代碼如下 :/簡單類var re = /abc123/;/ 將匹配 abc123 這 6 個字符中一個/負向類re = /abc/;/ 將匹配除abc 之外的一個字符/范圍類re = /a-b/;/ 將匹配小寫a-b 26 個字母re = /0-9/;/ 將匹配除 0-910 個字符之處的一個字符/組合類re = /a-b0-9A-Z_/;/將匹配字母,數(shù)字和下劃線14/20JS 正則表達式從入門到精
30、通精通下面是正則表達式中的預定義類代碼等同于匹配. IE 下 n ,其它 nr匹配除換行符之外的任何一個字符d 0-9匹配數(shù)字D 0-9匹配非數(shù)字字符s nrtfx0B匹配一個空白字符S nrtfx0B匹配一個非空白字符w a-zA-Z0-9_匹配字母數(shù)字和下劃線W a-zA-Z0-9_匹配除字母數(shù)字下劃線之外的字符量詞 (下表量詞單個出現(xiàn)時皆是貪婪量詞)代碼 描述* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo" 。 * 等價于 0, 。+ 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "
31、;zo"以及 "zoo" ,但不能匹配"z"。 + 等價于 1, 。? 匹配前面的子表達式零次或一次。例如,"do(es)?" 可以匹配"do" 或 "does" 中的 "do"。?等價于 0,1 。n n 是一個非負整數(shù)。匹配確定的n次。例如, 'o2'不能匹配 "Bob"中的 'o' ,但是能匹配 "food" 中的兩個 o。n, n 是一個非負整數(shù)。至少匹配n 次。例如, 'o2,
32、'不能匹配 "Bob"中的 'o' ,但能匹配 "foooood" 中的所有 o。 'o1,'等價于 'o+' 。 'o0,'則等價于 'o*' 。n,m m 和 n 均為非負整數(shù), 其中 n <= m。最少匹配n 次且最多匹配m 次。劉, "o1,3" 將匹配 "fooooood" 中的前三個o。 'o0,1' 等價于 'o?' 。請注意在逗號和兩個數(shù)之間不能有空格。貪婪量詞與惰性量詞15
33、/20JS 正則表達式從入門到精通精通?用貪婪量詞進行匹配時,它首先會將整會字符串當成一個匹配,如果匹配的話就退出,如果不匹配, 就截去最后一個字符進行匹配,如果不匹配, 繼續(xù)將最后一個字符截去進行匹配,直到有匹配為止。直到現(xiàn)在我們遇到的量詞都是貪婪量詞?用惰性量詞進行匹配時,它首先將第一個字符當成一個匹配,如果成功則退出,如果失敗,則測試前兩個字符,依些增加,直到遇到合適的匹配為止惰性量詞僅僅在貪婪量詞后面加個"?" 而已 ,如 "a+" 是貪婪匹配的 ,"a+?" 則是惰性的復制代碼代碼如下 :var str = "ab
34、c"var re = /w+/;/ 將匹配 abcre = /w+?/;/ 將匹配 a多行模式復制代碼代碼如下 :var re = /a-z$/;var str = "abncdef"alert(str.replace(re,"#");/abncde#re =/a-z$/m;alert(str.replace(re,"#");/a#ncde#分組與非捕獲性分組復制代碼代碼如下 :re = /abc2/;/ 將匹配 abcc16/20JS 正則表達式從入門到精通精通re = /(abc)2/;/ 將匹配 abcabc/上面的分
35、組都是捕獲性分組str = "abcabc#"arr = re.exec(str);alert(arr1);/abc/非捕獲性分組(?:)re = /(?:abc)2/;arr = re.exec(str);alert(arr1);/undefined候選(也就是所說的“或”)復制代碼代碼如下 :re = /a|bc$/;/ 將匹配開始位置的a 或結束位置的bcstr ="add"alert(re.test(str);/truere = /(a|bc)$/;/ 將匹配 a 或 bcstr ="bc"alert(re.test(str);/true當包含分組的正則表達式進行過test,match,search這些方法之后,每個分組都被放在一個特殊的地方以備將來使用,這些存儲是分組中的特殊值,我們稱之為反向引用Js 代碼復制代碼代碼如下 :17/20JS 正則表達式從入門到精通精通var re = /(A?(B?(C?)/;/*上面的正則表達式將依次產生三個分組(A?(B?(C?)最外面的(B?(C?)(C?)*/str = "ABC"re.test(str);/ 反向引
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 船舶公司電梯施工協(xié)議
- 學生宿舍管理員聘用協(xié)議樣本
- 2025屆河南省洛陽名校高二物理第一學期期末考試模擬試題含解析
- 2025屆江蘇省金陵中學高三物理第一學期期中經典模擬試題含解析
- 河南省名校聯(lián)盟2025屆物理高三上期末考試試題含解析
- 重慶三十二中學2025屆高二物理第一學期期中監(jiān)測試題含解析
- 遼寧省遼源市金鼎高級中學2025屆物理高一第一學期期中經典模擬試題含解析
- 內蒙古烏蘭察布市集寧地區(qū)2025屆物理高二第一學期期末達標測試試題含解析
- 江蘇省大豐市實驗初級中學2025屆物理高二上期末學業(yè)質量監(jiān)測模擬試題含解析
- 2025屆吉林省物理高二第一學期期中調研模擬試題含解析
- 2023年國考稅務系統(tǒng)招聘考試真題
- 2024年反腐倡廉廉政法規(guī)知識競賽題庫及答案(130題)
- 2024-2025學年廣東省珠海市香洲區(qū)九洲中學教育集團七年級(上)期中數(shù)學試卷(含答案)
- 資本經營-終結性考試-國開(SC)-參考資料
- 商務禮儀課件教學課件
- 【天潤乳業(yè)資本結構問題及優(yōu)化對策分析案例10000字】
- 住院醫(yī)師規(guī)范化培訓責任導師制管理制度
- 2024-2025學年高中物理必修 第三冊人教版(2019)教學設計合集
- 2024年連鎖奶茶店員工工作協(xié)議版
- DB34T 1835-2022 高速公路收費人員微笑服務規(guī)范
- 2024年山東省中考英語試卷十二套合卷附答案
評論
0/150
提交評論