




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、正則表達(dá)式完全學(xué)習(xí)手冊:菜鳥入門指導(dǎo)正則表達(dá)式可以很恐怖,真得很恐怖。幸運(yùn)的是,一旦記住每個符號所表達(dá)的意思,恐懼就會快速消退。如果你對正則表達(dá)式一無所知,正如文章標(biāo)題,那你又就有很多東西要學(xué)了。下面讓我們馬上開始吧。第一節(jié):基礎(chǔ)學(xué)習(xí)想要高效地學(xué)習(xí)和掌握正則表達(dá)式的關(guān)鍵是花一天的時間記住所有符號。這可能是我所能提供的最好的建議。坐下來,做些記憶卡片,然后記住它們。以下為最常見的一些符號:. - 匹配任意字符,換行符除外(如果 dotall 為 false)。* - 該符號前面的字符,匹配 0 次或多次。+ - 該符號前面的字符,匹配 1次或多次? - 該符號前面的字符是可選的。匹配 0 次或
2、1 次。d - 匹配任何單個數(shù)字。w - 匹配任何一個字符(包括字母數(shù)字以及下劃線)。XYZ - 匹配字符組中的任意一個字符,即 X、Y、Z 中的任意一個。XYZ+ - 匹配字符組中的一個或多個字符。$ - 匹配字符串結(jié)束的位置。 - 匹配字符串開始的位置。a-z - 當(dāng)出現(xiàn)在字符類中時, 表示 NOT(非);對于該示例,表示匹配任何非小寫字母。 很悶吧,不過還是記住它們,記住之后你會知道好處的。工具你認(rèn)為一個表達(dá)式是正確的,非常正確,但就是無法得到想要的結(jié)果,這時你可能會產(chǎn)生將頭發(fā)拔光的沖動。去下載 RegExr 桌面應(yīng)用程序吧,這個對你是必不可少的,而且玩起來非常有趣的。它提供實時檢查,還
3、有一個側(cè)邊欄,里面包含了每個字符的定義和用戶,非常詳細(xì)。第二節(jié):正則表達(dá)式傻瓜教程:抓屏視頻下一步是學(xué)習(xí)如何真正地使用這些符號。如果視頻是你的偏好,那你走運(yùn)了。這里有五個課程的視頻教程,非常適合你:“正則表達(dá)式傻瓜教程”。(Jeffery Way:在這一系列視頻教程中,我將交給你如何在JavaScript和PHP中高效的使用正則表達(dá)式。我會假設(shè)你是從零開始。)第三節(jié):正則表達(dá)式和 JavaScript本節(jié)為最后一節(jié),我們來看看JavaScript 方法如何使用正則表達(dá)式。1. Test()這個方法接受單個字符串參數(shù),然后返回一個布爾值,該值表明是否找到一個批評。如果你不需要對特定的匹配結(jié)果進(jìn)行
4、操作,比如,驗證用戶名,“test”方法已足夠完成這個任務(wù)。示例1. varusername=JohnSmith; 2. alert(/A-Za-z_-+/.test(username);/returnstrue在上面的代碼中,我們首先聲明一個正則表達(dá)式,表示僅允許大寫或小寫字母、下劃線和連字符。將這些可接受的字符放在括號中,就指定了一個字符組。緊隨其后的 + 號表示我們想要正在尋找的是一個或多個前述字符組中的字符。然后使用該范式對變量“JohnSmith”進(jìn)行測試。由于存在匹配,瀏覽器的顯示框中將顯示 true。2. Split()你可能對 split 方法已經(jīng)很熟了。該方法接受單個正規(guī)表達(dá)
5、式,表示在哪里進(jìn)行“分割”。請注意,如果喜歡,你還可以使用字符串。3. varstr=thisismystring; 4. alert(str.split(/s/);/alertsthis,is,my,string上面代碼中的 s 表示單個空格,通過它,我們將字符串分割為一個數(shù)組。如果想要訪問某個特定的值,使用相應(yīng)的索引即可。5. varstr=thisismythisstring; 6. alert(str.split(/s/)3);/alertsstring3. replace()可能你已經(jīng)想到了,replace 方法可以用來將文本中的一部分(由字符串或正則表達(dá)式表示)替換為不同的字符串。
6、示例如果想要將“Hello, World”改為“Hello, Universe”,可以使用下面的代碼:7. varsomeString=Hello,World; 8. someString=someString.replace(/World/,Universe); 9. alert(someString);/alertsHello,Universe應(yīng)留意的是,對于這個簡單的示例,我們本來可以簡單的使用.replace(World, Universe)。另外,使用 replace 方法不會自動重寫變量的值,我們必須將返回值再次分配給這個變量:someString。示例 2再舉一個例子,假設(shè)用戶要
7、在我們的網(wǎng)站注冊一個賬號,我們可能想要提供一些基礎(chǔ)的安全預(yù)防措施。也許我們想要留下他們的用戶名,而刪除其他任何符號,引號、分號等等。對于 JavaScript 和正則表達(dá)式,執(zhí)行這類任務(wù)是樁瑣碎的小事情。10. varusername=J;ohnSmith;%; 11. username=username.replace(/A-Za-zd_-+/,); 12. alert(username);/JohnSmith;%看到最后生成的顯示值,有人可能會想,上面的代碼有錯誤。事實并非如此。你仔細(xì)看看,會發(fā)現(xiàn)字母“J”后的分號被刪除了,正如我們所期望的那樣。為了通知引擎繼續(xù)搜索字符串查找更多匹配,我們
8、可以做結(jié)束的斜杠后面直接添加一個“g”,這個修飾符或標(biāo)記表示“global(全局)”。修改后的代碼如下所示:13. varusername=J;ohnSmith;%; 14. username=username.replace(/A-Za-zd_-+/g,); 15. alert(username);/alertsJohnSmith現(xiàn)在,正則表達(dá)式搜索整個字符串,替換所有必要的字符。讓我們看看關(guān)鍵的表達(dá)式(.replace(/A-Za-zd_-+/g, );),要注意,括號內(nèi)的向上箭頭(即 )非常重要。當(dāng)放在字符組中時,該符號表示“找到所有不是”?,F(xiàn)在回頭在看看這個代碼,它表示,找到所有不是字
9、母、數(shù)字(由 d 表示)、下劃線或連字符的符號;如果找到一個匹配,將其替換為空,事實上就是刪除該字符。4. Match()與test方法不同,match() 返回一個包含所有找到的批評的數(shù)組。示例16. varname=JeffreyWay; 17. alert(name.match(/e/);/alertse上面的代碼將顯示一個字母“e”。但是,在字符串“JeffreyWay”中實際上包含2個 e。同樣,這次我們還是要使用修飾符“g”來聲明一個全局搜索。18. varname=JeffreyWay; 19. alert(name.match(/e/g);/alertse,e如果想要顯示數(shù)組中
10、這些特定值中的一個,可以做括號中引用想要的索引。20. varname=JeffreyWay; 21. alert(name.match(/e/g)1);/alertse示例 2讓我們看下一個示例,確保我們對它的理解是正確的。1. varstring=Thisisjustastringwithsome12345andsome!#$mixedin.; 2. alert(string.match(/a-z+/gi);/alertsThis,is,just,a,string,with,some,and,some,mixed,in在這個正則表達(dá)式中,我們創(chuàng)建了一個范式,可匹配一個或多個大寫或小寫字母。
11、這多虧了“i”修飾符。除外,我們還加上了“g”來聲明進(jìn)行全局搜索。上面的代碼將顯示“This,is,just,a,string,with,some,and,some,mixed,in.”然后,如果想要獲取變量數(shù)組中這些值中的某一個,我們只需引用相應(yīng)的索引即可。3. varstring=Thisisjustastringwithsome12345andsome!#$mixedin.; 4. varmatches=string.match(/a-z+/gi); 5. alert(matches2);/alertsjust分割電子郵件地址為了練習(xí),我們試著將一個電子郵件地址(nettutstutsp
12、)分割為相應(yīng)的兩部分:用戶名和域名,即 nettuts 和tutsplus。6. varemail=; 7. alert(email.replace(/(a-zd_-+)(a-zd_-+).a-z2,4/ig,$1,$2);/alertsnettuts,tutsplus如果對于正則表達(dá)式,你還是新手,上面的代碼可能會看起來有點(diǎn)嚇人。不用擔(dān)心,第一次看到都會感到“恐怖”。一旦將它分解為一個一個小子集,你會發(fā)覺其實非常簡單。下面讓我們一條一條進(jìn)行分析:8. .replace(/(a-zd_-+)從中間開始看,我們要搜索任何字母、數(shù)字、下劃線或連字
13、符,并且匹配一次或多次(+)。無論匹配是上面,我們想要訪問其值,所以將其放到括號中。這樣,我們稍后可以引用這個匹配的子集。9. (a-zd_-+)緊接著前一個匹配,我們看到 符號,然后是有一組一個或多個字母、數(shù)字、下劃線和連字符。同樣,我們將其放到括號內(nèi),以便稍后訪問。10. .a-z2,4/ig,繼續(xù)找,我們看到一個點(diǎn)。因為在正則表達(dá)式中,句點(diǎn)可表示任何字符(有時換行符除外),因此必須使用“”進(jìn)行轉(zhuǎn)義。最后一部分是用于查找“.com”。我們知道,大多數(shù)域名,如果不是所有,其后綴為 2 到 4 個字符(com、edu、net、name 等等)。如果找到具體的范圍,我們可以先行使用更常規(guī)的符號,
14、如 * 或 +。不過,我們在這里是將2個數(shù)字放到一個大括號中,分別表示最大值和最小值。11. $1,$2)這個最后一部分表示replace方法的第二個參數(shù),或者我們想要將匹配字符集替換為的對象。在這里,我們使用 $1 和 $2 分別來引用保存在第一個和第二個括號中的值。對于這個特定示例, $1 指向 nettuts,$2 指向 tutsplus。創(chuàng)建自己的位置對象作為最后的一個項目,我們將創(chuàng)建位置對象。位置對象向用戶提供有關(guān)當(dāng)前頁面的信息:href、協(xié)議、地址、端口等。請注意,這里僅僅是作為練習(xí)之用。對于真正的網(wǎng)址,使用已有的位置對象即可。首先我們創(chuàng)建位置函數(shù),該函數(shù)接受單個參數(shù),該參數(shù)表示我
15、們想要“解碼”的網(wǎng)址,我們將其稱為“l(fā)oc”。12. functionloc(url)現(xiàn)在,我們可以按照下面的方式調(diào)用它,并傳入一個亂七八糟的 url:13. varl=loc(?somekey=somevalue&anotherkey=anothervalue#theHashGoesHere);下一步,我們需要返回包含多個方法的對象。14. functionloc(url) 15. return 16. 17. 18. 搜索(search)我們不會創(chuàng)建所有方法,但我們會模仿其中幾個。第一個是“search”。使用正則表達(dá)式,我們將要搜索 url 并
16、返回查詢字符串中的所有內(nèi)容。19. return 20. search:function() 21. returnurl.match(/?(.+)/i)1; 22. /returnssomekey=somevalue&anotherkey=anothervalue#theHashGoesHere 23. 24. 在上面的代碼中,我們使用了傳入的 url,試圖使用我們的正則表達(dá)式對其進(jìn)行匹配。這個正則表達(dá)式在整個字符串中搜索問號,問號表示查詢字符串(querystring)的開始。在這個位置,我們需奧獲取其余的字符,這就是將(.+)放入括號的原因。最后,我們需要返回那個字符區(qū)塊,因此,使用1來定
17、位它。哈希值(Hash)現(xiàn)在我們將創(chuàng)建一個方法,返回 url 的哈希值,或者 # 號后面的內(nèi)容。25. hash:function() 26. returnurl.match(/#(.+)/i)1;/returnstheHashGoesHere 27. ,這次,我們搜索 # 號,同樣,使用括號獲取后面的字符,并使用 1 指向那個特定的子集。協(xié)議protocol 方法應(yīng)返回,頁面所用的協(xié)議,可能你已經(jīng)猜到了。這種協(xié)議通常為 http 或 https。28. protocol:function() 29. returnurl.match(/(ht|f)tps?:/i)0;/returnshttp:
18、 30. ,這一個稍微更加復(fù)雜一點(diǎn),因為存在幾個選項:http、https 和 ftp。雖然可以使用這樣的格式 (http|https|ftp),但使用 (ht|f)tps? 更為簡潔,表示我們首先查找“ht”或“f”字符,下一步,匹配“tp”字符。最后的“s”是可選的,所以我們加了一個問號,表示問號前的字符出現(xiàn)零次或一次。Href這個是最后一個方法,返回頁面的 url。31. href:function() 32. returnurl.match(/(.+.a-z2,4)/ig);/returns 33. 這里,我們對所有字符進(jìn)行匹配,直到找到一個點(diǎn)號,這個點(diǎn)號后面有 2 - 4 個字符(表示 com、au、edu、name 等等)。重要的是意識到,對于這些表達(dá)式,我們可以寫得很復(fù)雜也可以寫得很簡單,這在于我們要求有多嚴(yán)格。一個簡單的函數(shù)34. functionloc(url) 35. return 36. search:function() 37. returnurl.match(/?(.+)/i)1; 38. , 39. 40. hash:function() 41. returnurl.match(/#(.+)/i)1; 42. , 43. 44. protocol:function() 4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中醫(yī)護(hù)理學(xué)(第5版)課件 第十章 其他常用中醫(yī)護(hù)理技術(shù)
- 三農(nóng)產(chǎn)品包裝與運(yùn)輸管理手冊
- 物理力學(xué)概念引入與實踐活動設(shè)計
- 政府部門信息化建設(shè)和數(shù)據(jù)治理方案
- 銷售員工心態(tài)培訓(xùn)課程
- 可行性研究報告封面格式
- 建筑智能化系統(tǒng)設(shè)計技術(shù)規(guī)范
- 零售業(yè)O2O營銷模式創(chuàng)新與實施策略
- 綠色建筑材料應(yīng)用技術(shù)規(guī)范書
- 機(jī)器人技術(shù)及其在物流行業(yè)的應(yīng)用手冊
- GB/T 5023.5-2008額定電壓450/750 V及以下聚氯乙烯絕緣電纜第5部分:軟電纜(軟線)
- GB/T 23445-2009聚合物水泥防水涂料
- 瓷貼面教學(xué)課件
- 尺骨冠突骨折課件
- 北師大版七年級下冊第一章整式的乘除計算題專項訓(xùn)練
- 2022年蘇州健雄職業(yè)技術(shù)學(xué)院單招考試面試試題及答案解析
- 植物生理教案
- 乳腺癌改良根治術(shù)
- 新版(七步法案例)PFMEA
- 臨床護(hù)理重點(diǎn)??平ㄔO(shè)項目評審標(biāo)準(zhǔn)
- 二倍角的三角函數(shù)說課稿
評論
0/150
提交評論