正則表達式知識詳解_第1頁
正則表達式知識詳解_第2頁
正則表達式知識詳解_第3頁
正則表達式知識詳解_第4頁
正則表達式知識詳解_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一、什么是正則表達式?.定義:正則表達式(regularexpression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字符與運算符可以將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。.組成:正則表達式是由普通字符(例如字符a到z)以及特殊字符(稱為“元字符")組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。.何時使用:驗證——從頭到尾完整匹配!查找——只要部分匹配即可!二、正則表達式的基本語法和規則1.備選字符集:規定某*一位字符*可用的備選字符的集合語法"可選字符列表]懶惰模式:正則表達式僅匹配最小的符合規則的字符串比如:篩選網頁中的a元素:<a\s+(.*)href\s*=\s*[,,,]([A,n]*)[I,,l貪婪模式—>懶惰模式:.*?例如:您可能搜索HTML文檔,以查找括在H1標記內的章節標題。該文本在您的文檔中如下:<hl>Chapter1-IntroductiontoRegularExpression</hl>下面的表達式匹配從開始小于符號(<)到關閉H1標記的大于符號(>)之間的所有內容。/<.*>/如果您只需要匹配開始H1標記,下面的“非貪心”表達式只匹配<H1>。/<.*?>/通過在*、+或?限定符之后放置?,該表達式從“貪心"表達式轉換為“非貪心”表達式或者最小匹配。三、常用正則表達式示例及說明:.正則表達式驗證控制文本框的輸入字符類型1)只能輸入數字和英文的:<inputonkeyup=',value=value.replace(/[\W]/g/')"onbeforepaste="clipboardData.setData(,text',clipboardData.getData('text').replace(/[A\d]/g;,))nID="TextlHNAME=HTextln>2)只能輸入數字的:<inputonkeyup二"value=value,replace(/[八\d]/g,")"onbeforepaste="clipboardData.setData(,text,,clipboardData.getData('text,).replace(/[A\d]/g;,))nID=,,Text2HNAME=HText2n>3)只能輸入全角的:<inputonkeyup="value=value.replace(/[A\uFFOO-\uFFFF]/g,")”onbeforepaste="clipboardData.setData(,text',clipboardData.getData(,text,).replace(/[A\uFF00-\uFFFF]/gz,,))HID=nText3"NAME="Text3”>4)只能輸入漢字的:<inputonkeyup=,,value=value.replace(/[A\u4E00-\u9FA5]/gz,')"onbeforepaste="clipboardData.setData(,text,,clipboardData.getData('text').replace(/[A\u4E00-\u9FA5]/g,"))“ID=',Text4HNAME=,,Text4',>.正則表達式的應用實例通俗說明*******************************************************************************〃校驗是否全由數字組成/A[0-9]{l,20}$/A表示打頭的字符要匹配緊跟人后面的規則$表示打頭的字符要匹配緊靠$前面的規則[]中的內容是可選字符集[0-9]表示要求字符范圍在0-9之間{1,20}表示數字字符串長度合法為1到20,即為[0-9]中的字符出現次數的范圍是1到20次。r和$/成對使用應該是表示要求整個字符串完全匹配定義的規則,而不是只匹配字符串中的一個子串。*******************************************************************************〃校驗登錄名:只能輸入5-20個以字母開頭、可帶數字、的字串/A[a-zA-Z]{l}([a-zA-Z0-9]|[J){4,19)$/A[a-zA-Z]{l}表示第一個字符要求是字母。([a-zA-Z0-9]|[J){4,19}表示從第二位開始(因為它緊跟在上個表達式后面)的一個長度為4到9位的字符串,它要求是由大小寫字母、數字或者特殊字符集[.」組成。*******************************************************************************〃校驗用戶姓名:只能輸入1-30個以字母開頭的字串/A[a-zA-Z]{l,30}$/*******************************************************************************〃校驗密碼:只能輸入6-20個字母、數字、下劃線/人(\w){6,20}$/\w:用于匹配字母,數字或下劃線字符*******************************************************************************〃校驗普通電話、傳真號碼:可以〃+〃或數字開頭,可含有〃-〃和〃〃/A[+]{0,l}(\d){l/3}[]?(H?((\d)|[]){lJ2})+$/\d:用于匹配從0到9的數字;元字符規定其前導對象必須在目標對象中連續出現零次或一次可以匹配的字符串如:+123-999999;+123-999999;123999999;+123999999等*******************************************************************************〃校驗URL/Ahttp[s]{O,l}:W.+$/或/Ahttp[s]{O,l}:W.{l,n}$/(表示url串的長度為length(Hhttps://")+n)\/:表示字符7"。.表示所有字符的集+等同于{L},就是1到正無窮吧。*************************************************************************三、RegExp對象和方法在Javascript中,通過RegExp對象來支持正則表達式。創建正則表達式的方式有兩種:.最簡單的創建正則表達式的方法:字面量形式Varexpression=/pattern/flags其中pattern部分可以使任何簡單的正則表達式Flags表示正則表達式的標志,正則表達式的匹配模式支持3個標志:1)"g":表示全局(globle)模式,即模式被應用于所有字符串,而非在發現第一個匹配項是立即停止。"i":表示不區分大小寫模式,即在確定匹配項是忽略模式于字符串的大小寫。"m":表示多行模式,即在到達一行文本末尾是還會繼續查找下一行中是否存在與模式匹配的項。例如:/*匹配字符串中所有"at"的實例*/Varpaaternl=/at/g;/*匹配第一個〃batz/或〃cat”,不區分大小寫*/Varpaatern2=/[bc]at/i;/*匹配所有以"at"結尾的3個字符串的組合,不區分大小寫*/Varpaatern2=/.at/gi;.使用RegExp構造函數創建正則表達式Varexpression=newRegexp(n[bc]at,/);其中傳給RegExp構造函數的兩個參數都是字符串(不能把正則表達式的字面量傳遞給RegExp構造函數),也因此,在某些情況下要對字符進行雙重轉義。所有的元字符都必須進行雙重轉義。例如:字面量模式:A[bc\]at/A.at//nameVage/Ad.\d{l,2}/Aw\\hello\\123/等價的字符串形式:"\\[bc\\]atname\Vage,z"\\d.\\d{L2}""\\w\\\\hello\\\\123”注意:使用正則表達式字面量和使用RegExp構造函數創建的正則表達式不一樣,正則表達式字面量始終會共享同一個RegExp實例,而構造函數創建的每一個新RegExp實例都是一個新實例(動態創建的)。.Exec()查找方法Exec()接受一個參數,即要應用模式的字符串,然后返回包含第一個匹配項的信息的數組,如果沒有找到則返回nullo返回的數組包含兩個屬性:index和input,index表示匹配項在字符串中的位置,input表示應用正則表達式的字符串。對于exec()而言即使在模式中設置了全局模式(g),它每次也只會返回一個匹配項,但是如果設置了全局模式,每次調用它都會返回字符串中的下一個匹配項,知道搜索到字符串的末尾為止。所以自全局匹配模式下,lastlndex的值在每次調用exec()后,都會增加,所以要想獲取所有的匹配項內容和下標,需要循環獲取。而在非全局模式下lastlndex則始終不變。.test()驗證方法此方法要求驗證的字符串和正則表達式從頭到尾完全匹配,需要"人"和"$"符號。Reg.test(str):如果匹配,返回true,否則返回falseoTest。方法經常被用在if語句中,經常被用在驗證用戶輸入的情況下,驗證用戶輸入是不是有效。例如:Vartext=/z000-00-0000z,;Varpattern=Ad{3}-\d{2}-\d{4}/;If(pattern.test(text)){Atert("thepatternwasmatched");強調:1.無論備選字符集包含多少字符,只能選1個2.必須選1個!比如:6位數字的密碼[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]簡化:1.當備選字符連續時,可用-表示范圍的區間比如:[0123456789]-->[0-9][0-9][0-9][0-9][0-9][0-9][0-9]位小寫字母位大寫字母[A-Za-z]-->l位字母,大小寫都行[0-9a-zA-Z]—>1位字母或數字都行反選:[八不能選的字符列表]比如:[八47]強調:八作〃除了〃使用時,只能放在開頭.預定義字符集:為常用的字符集專門提供的簡化寫法!"\d”位數字"W->[0-9a-zA-Z_]->l位字母,數字或一"\s"位空字符:匹配任何空白字符,包括空格、制表符、換頁符等等。等價于[\An\r\t\v]o".除換行回車外的任何一個字符,如:"a.[0-9]":表示一個字符串有一個匕"后面跟著一個任意字符和一個數字;"A.{3}$":表示有任意三個字符的字符串(長度為3個字符)\t匹配一個制表符預定義字符的反義:預定義字符的大寫形式都是小寫的反義位非數字字符\S——匹配任何非空白字符。等價于[A\f\n\r\t\v]e\v匹配—^垂直制表符匹配一個換行符\r匹配一個回車符.數量詞:規定相鄰的字符集可出現的次數確定數量:3種:{n}->必須反復出現n位{n,m}->最少出現n次,最多出現m次{n,}-->至少出現n次,多了不限!比如:/A\d{6}$/——6位數字手機號規則:第1位:只能是1第2位:[34578]第3位之后,必須是9位數字手機號:/Al[34578]\d{9}$/不確定數量:3種:*:有沒有都行,次數不限,相當于{0,}+:至少1次,重復次數不限,相當于{1,}?:有沒有都行,最多1次,相當于{0,1}():分組|:左右兩正則表達式選其一身份證號邏輯:前15位數字16,17位必須是數字最后一位可以是數字或Xx后三位可有可無,如果有,只能出現一次\d{15}(\d\d[0-9Xx])?手機號:手機號前可能出現+86或0086。前綴可有可無,且只能出現一次前綴和手機號之間可以有或沒有任意個空字符第1位:只能是1第2位:[34578]第3位之后,必須是9位數字手機號:(\+86|0086)?\s*l[34578]\d{9}.指定匹配位置:人表達式:必須以表達式的規則為開頭表達式$:必須以表達式的規則為結尾比如:選擇字符串開頭的空格?A\s*選擇結尾空格?\s*$選擇開頭或結尾的空格?A\s*|\s*$*預告:今后只要在程序中執行驗證:都要前加入后加$*表示從頭到尾完整匹配。比如:test():A\d{6}$——從頭到尾必須只能是6位數字1234567.預判:在正式匹配正則表達式之前,先預讀整個字符串,進行初步匹配,如果預判都未通過,則不再驗證!)(?=表達式):先瀏覽字符串是否滿足表達式的要求何時使用:只要正則中出現類似"而且"比如:4位數字,但不能包含4和7(?=[A47]$)是否由除了4,7之外的字符組成)(?!表達式):先檢查字符串是否不滿足表達式要求比如:6位以上密碼。字母,數字組成首字母不能是數字:[a-zA-Z][a-zA-Z0-9]{5,}必須至少包含1個大寫字母不能都由小寫字母和數字組成:(?![a-z0-9]+$)必須至少包含1個數字不能都由小寫字母和大寫字母組成:(?![a-zA-Z]+$).特殊字符所謂特殊字符,就是一些有特殊含義的字符,如"*.txt"中的*,簡單的說就是表示任何字符串的意思。如果要查找文件名中有*的文件,則需要對*進行轉義,即在其前加一個\。Is\*.txte許多元字符要求在試圖匹配它

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論