JS的正則表達式
//校驗是否全由數字組成
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校驗登錄名:只能輸入5-20個以字母開頭、可帶數字、“_”、“.”的字串
- functionisRegisterUserName(s)
- {
- varpatrn=/^[a-zA-Z]{ 1 }([a-zA-Z0- 9 ]|[._]){ 4 , 19 }$/;
- if (!patrn.exec(s)) return false
- return true
- }
function isRegisterUserName(s) { var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/; if (!patrn.exec(s)) return false return true }
//校驗用戶姓名:只能輸入1-30個以字母開頭的字串
- functionisTrueName(s)
- {
- varpatrn=/^[a-zA-Z]{ 1 , 30 }$/;
- if (!patrn.exec(s)) return false
- return true
- }
- }}
- //校驗密碼:只能輸入6-20個字母、數字、下劃線
- <PRE class =javaname= "code" >functionisPasswd(s)
- {
- varpatrn=/^(/w){ 6 , 20 }$/;
- if (!patrn.exec(s)) return false
- return true
- }
- </PRE>
- <BR>
- <BR> //校驗普通電話、傳真號碼:可以“+”開頭,除數字外,可含有“-”
- <BR><PRE class =javaname= "code" >functionisTel(s)
- {
- //varpatrn=/^[+]{0,1}(/d){1,3}[]?([-]?(/d){1,12})+$/;
- varpatrn=/^[+]{ 0 , 1 }(/d){ 1 , 3 }[]?([-]?((/d)|[]){ 1 , 12 })+$/;
- if (!patrn.exec(s)) return false
- return true
- }
- </PRE>
- <BR>
- <BR> //校驗手機號碼:必須以數字開頭,除數字外,可含有“-”
- <BR><PRE class =javaname= "code" >functionisMobil(s)
- {
- varpatrn=/^[+]{ 0 , 1 }(/d){ 1 , 3 }[]?([-]?((/d)|[]){ 1 , 12 })+$/;
- if (!patrn.exec(s)) return false
- return true
- }
- </PRE>
- <BR>
- <BR> //校驗郵政編碼
- <BR><PRE class =javaname= "code" >functionisPostalCode(s)
- {
- //varpatrn=/^[a-zA-Z0-9]{3,12}$/;
- varpatrn=/^[a-zA-Z0- 9 ]{ 3 , 12 }$/;
- if (!patrn.exec(s)) return false
- return true
- }
- </PRE>
- <BR>
- <BR> //校驗搜索關鍵字
- <BR><PRE class =javaname= "code" >functionisSearch(s)
- {
- varpatrn=/^[^`~!@#$%^&*()+=|///][/]/{/}:;'/,.<>/?]{ 1 }[^`~!@$%^&()+=|///]
- [/]/{/}:;'/,.<>?]{ 0 , 19 }$/;
- if (!patrn.exec(s)) return false
- return true
- }
- functionisIP(s) //byzergling
- {
- varpatrn=/^[ 0 - 9 .]{ 1 , 20 }$/;
- if (!patrn.exec(s)) return false
- return true
- }
- </PRE>
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >正則表達式</SPAN>
- <BR><PRE class =javaname= "code" > "^//d+$" //非負整數(正整數+0)
- "^[0-9]*[1-9][0-9]*$" //正整數
- "^((-//d+)|(0+))$" //非正整數(負整數+0)
- "^-[0-9]*[1-9][0-9]*$" //負整數
- "^-?//d+$" //整數
- "^//d+(//.//d+)?$" //非負浮點數(正浮點數+0)
- "^(([0-9]+//.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*//.[0-9]+)|([0-9]*[1-9][0-9]*))$"
- //正浮點數
- "^((-//d+(//.//d+)?)|(0+(//.0+)?))$" //非正浮點數(負浮點數+0)
- "^(-(([0-9]+//.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*//.[0-9]+)|([0-9]*[1-9][0-9]*)))$"
- //負浮點數
- "^(-?//d+)(//.//d+)?$" //浮點數
- "^[A-Za-z]+$" //由26個英文字母組成的字符串
- "^[A-Z]+$" //由26個英文字母的大寫組成的字符串
- "^[a-z]+$" //由26個英文字母的小寫組成的字符串
- "^[A-Za-z0-9]+$" //由數字和26個英文字母組成的字符串
- "^//w+$" //由數字、26個英文字母或者下劃線組成的字符串
- "^[//w-]+(//.[//w-]+)*@[//w-]+(//.[//w-]+)+$" //email地址
- "^[a-zA-z]+://(//w+(-//w+)*)(//.(//w+(-//w+)*))*(//?//S*)?$" //url
- "^[A-Za-z0-9_]*$"
- </PRE>
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >正則表達式使用詳解</SPAN>
- <BR>
- <BR>簡介
- <BR>
- <BR>簡單的說,正則表達式是一種可以用于模式匹配和替換的強有力的工具。其作用如下:
- <BR>測試字符串的某個模式。例如,可以對一個輸入字符串進行測試,看在該字符串是否存在一個電話號碼模式或一個信用卡號碼模式。這稱為數據有效性驗證。
- <BR>替換文本。可以在文檔中使用一個正則表達式來標識特定文字,然后可以全部將其刪除,或者替換為別的文字。
- <BR>根據模式匹配從字符串中提取一個子字符串。可以用來在文本或輸入字段中查找特定文字。
- <BR>
- <BR>基本語法
- <BR>
- <BR>在對正則表達式的功能和作用有了初步的了解之后,我們就來具體看一下正則表達式的語法格式。
- <BR>
- <BR>正則表達式的形式一般如下:
- <BR>
- <BR>/love/ 其中位于“/”定界符之間的部分就是將要在目標對象中進行匹配的模式。用戶只要把希望查找匹配對象的模式內容放入“/”定界符之間即可。為了能夠使用戶更加靈活的定制模式內容,正則表達式提供了專門的“元字符”。所謂元字符就是指那些在正則表達式中具有特殊意義的專用字符,可以用來規定其前導字符(即位于元字符前面的字符)在目標對象中的出現模式。
- <BR>較為常用的元字符包括:“+”,“*”,以及“?”。
- <BR>
- <BR>“+”元字符規定其前導字符必須在目標對象中連續出現一次或多次。
- <BR>
- <BR>“*”元字符規定其前導字符必須在目標對象中出現零次或連續多次。
- <BR>
- <BR>“?”元字符規定其前導對象必須在目標對象中連續出現零次或一次。
- <BR>
- <BR>下面,就讓我們來看一下正則表達式元字符的具體應用。
- <BR>
- <BR>/fo+/ 因為上述正則表達式中包含“+”元字符,表示可以與目標對象中的“fool”,“fo”,或者“football”等在字母f后面連續出現一個或多個字母o的字符串相匹配。
- <BR>
- <BR>/eg*/ 因為上述正則表達式中包含“*”元字符,表示可以與目標對象中的“easy”,“ego”,或者“egg”等在字母e后面連續出現零個或多個字母g的字符串相匹配。
- <BR>
- <BR>/Wil?/ 因為上述正則表達式中包含“?”元字符,表示可以與目標對象中的“Win”,或者“Wilson”,等在字母i后面連續出現零個或一個字母l的字符串相匹配。
- <BR>
- <BR>有時候不知道要匹配多少字符。為了能適應這種不確定性,正則表達式支持限定符的概念。這些限定符可以指定正則表達式的一個給定組件必須要出現多少次才能滿足匹配。
- <BR>
- <BR>{n}n是一個非負整數。匹配確定的n次。例如, 'o{2}' 不能匹配 "Bob" 中的 'o' ,但是能匹配 "food" 中的兩個o。
- <BR>
- <BR>{n,}n是一個非負整數。至少匹配n次。例如, 'o{2,}' 不能匹配 "Bob" 中的 'o' ,但能匹配 "foooood" 中的所有o。 'o{1,}' 等價于 'o+' 。 'o{0,}' 則等價于 'o*' 。
- <BR>
- <BR>{n,m}m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如, "o{1,3}" 將匹配 "fooooood" 中的前三個o。 'o{0,1}' 等價于 'o?' 。請注意在逗號和兩個數之間不能有空格。
- <BR>
- <BR>除了元字符之外,用戶還可以精確指定模式在匹配對象中出現的頻率。例如,/jim{ 2 , 6 }/上述正則表達式規定字符m可以在匹配對象中連續出現 2 - 6 次,因此,上述正則表達式可以同jimmy或jimmmmmy等字符串相匹配。
- <BR>在對如何使用正則表達式有了初步了解之后,我們來看一下其它幾個重要的元字符的使用方式。
- <BR><PRE class =javaname= "code" >/s:用于匹配單個空格符,包括tab鍵和換行符;
- /S:用于匹配除單個空格符之外的所有字符;
- /d:用于匹配從 0 到 9 的數字;
- /w:用于匹配字母,數字或下劃線字符;
- /W:用于匹配所有與/w不匹配的字符;
- .:用于匹配除換行符之外的所有字符。
- </PRE>
- <BR>(說明:我們可以把/s和/S以及/w和/W看作互為逆運算)
- <BR>下面,我們就通過實例看一下如何在正則表達式中使用上述元字符。
- <BR>//s+/上述正則表達式可以用于匹配目標對象中的一個或多個空格字符。
- <BR>//d000/ 如果我們手中有一份復雜的財務報表,那么我們可以通過上述正則表達式輕而易舉的查找到所有總額達千元的款項。
- <BR>除了我們以上所介紹的元字符之外,正則表達式中還具有另外一種較為獨特的專用字符,即定位符。定位符用于規定匹配模式在目標對象中的出現位置。較為常用的定位符包括:“^”,“$”,“/b”以及“/B”。
- <BR><PRE class =javaname= "code" >“^”定位符規定匹配模式必須出現在目標字符串的開頭
- “$”定位符規定匹配模式必須出現在目標對象的結尾
- “/b”定位符規定匹配模式必須出現在目標字符串的開頭或結尾的兩個邊界之一
- “/B”定位符則規定匹配對象必須位于目標字符串的開頭和結尾兩個邊界之內,
- 即匹配對象既不能作為目標字符串的開頭,也不能作為目標字符串的結尾。
- </PRE>
- <BR>同樣,我們也可以把“^”和“$”以及“/b”和“/B”看作是互為逆運算的兩組定位符。舉例來說:/^hell/ 因為上述正則表達式中包含“^”定位符,所以可以與目標對象中以“hell”,“hello”或“hellhound”開頭的字符串相匹配。/ar$/ 因為上述正則表達式中包含“$”定位符,所以可以與目標對象中以“car”,“bar”或“ar”結尾的字符串相匹配。//bbom/ 因為上述正則表達式模式以“/b”定位符開頭,所以可以與目標對象中以“bomb”,或“bom”開頭的字符串相匹配。/man/b/ 因為上述正則表達式模式以“/b”定位符結尾,所以可以與目標對象中以“human”,“woman”或“man”結尾的字符串相匹配。
- <BR>為了能夠方便用戶更加靈活的設定匹配模式,正則表達式允許使用者在匹配模式中指定某一個范圍而不局限于具體的字符。例如:
- <BR><PRE class =javaname= "code" >/[A-Z]/ 上述正則表達式將會與從A到Z范圍內任何一個大寫字母相匹配。
- /[a-z]/ 上述正則表達式將會與從a到z范圍內任何一個小寫字母相匹配。
- /[ 0 - 9 ]/ 上述正則表達式將會與從 0 到 9 范圍內任何一個數字相匹配。
- /([a-z][A-Z][ 0 - 9 ])+/ 上述正則表達式將會與任何由字母和數字組成的字符串,如“aB0”等相匹配。
- </PRE>
- <BR>這里需要提醒用戶注意的一點就是可以在正則表達式中使用“()”把字符串組合在一起。“()”符號包含的內容必須同時出現在目標對象中。因此,上述正則表達式將無法與諸如“abc”等的字符串匹配,因為“abc”中的最后一個字符為字母而非數字。
- <BR>如果我們希望在正則表達式中實現類似編程邏輯中的“或”運算,在多個不同的模式中任選一個進行匹配的話,可以使用管道符“|”。例如:/to|too| 2 / 上述正則表達式將會與目標對象中的“to”,“too”,或“ 2 ”相匹配。
- <BR>正則表達式中還有一個較為常用的運算符,即否定符“[^]”。與我們前文所介紹的定位符“^”不同,否定符“[^]”規定目標對象中不能存在模式中所規定的字符串。例如:/[^A-C]/ 上述字符串將會與目標對象中除A,B,和C之外的任何字符相匹配。一般來說,當“^”出現在“[]”內時就被視做否定運算符;而當“^”位于“[]”之外,或沒有“[]”時,則應當被視做定位符。
- <BR>最后,當用戶需要在正則表達式的模式中加入元字符,并查找其匹配對象時,可以使用轉義符“/”。例如:/Th/*/ 上述正則表達式將會與目標對象中的“Th*”而非“The”等相匹配。
- <BR>在構造正則表達式之后,就可以象數學表達式一樣來求值,也就是說,可以從左至右并按照一個優先級順序來求值。優先級如下:
- <BR><PRE class =javaname= "code" > 1 ./轉義符
- 2 .(),(?:),(?=),[]圓括號和方括號
- 3 .*,+,?,{n},{n,},{n,m}限定符
- 4 .^,$,/anymetacharacter位置和順序
- 5 .|“或”操作
- </PRE>
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >使用實例</SPAN>
- <BR>在JavaScript 1.2 中帶有一個功能強大的RegExp()對象,可以用來進行正則表達式的匹配操作。其中的test()方法可以檢驗目標對象中是否包含匹配模式,并相應的返回 true 或 false 。
- <BR>我們可以使用JavaScript編寫以下腳本,驗證用戶輸入的郵件地址的有效性。
- <BR><PRE class =javaname= "code" ><html>
- <head>
- <scriptlanguage= "Javascript1.2" >
- <!--starthiding
- functionverifyAddress(obj)
- {
- varemail=obj.email.value;
- varpattern=
- /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/;
- flag=pattern.test(email);
- if (flag)
- {
- alert(“Youremailaddressiscorrect!”);
- return true ;
- }
- else
- {
- alert(“Please try again!”);
- return false ;
- }
- }
- //stophiding-->
- </script>
- </head>
- <body>
- <formonSubmit= "returnverifyAddress(this);" >
- <inputname= "email" type= "text" >
- <inputtype= "submit" >
- </form>
- </body>
- </html>
- </PRE>
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >正則表達式對象</SPAN>
- <BR>本對象包含正則表達式模式以及表明如何應用模式的標志。
- <BR><PRE class =javaname= "code" >語法 1 re=/pattern/[flags]
- 語法 2 re= new RegExp( "pattern" ,[ "flags" ])
- </PRE>
- <BR>參數
- <BR>re
- <BR>必選項。將要賦值為正則表達式模式的變量名。
- <BR>
- <BR>Pattern
- <BR>必選項。要使用的正則表達式模式。如果使用語法 1 ,用 "/" 字符分隔模式。如果用語法 2 ,用引號將模式引起來。
- <BR>
- <BR>Flags
- <BR>可選項。如果使用語法 2 要用引號將flag引起來。標志可以組合使用,可用的有:
- <BR><PRE class =javaname= "code" >g(全文查找出現的所有pattern)
- i(忽略大小寫)
- m(多行查找)
- </PRE>
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >示例</SPAN>
- <BR>下面的示例創建一個包含正則表達式模式及相關標志的對象(re),向您演示正則表達式對象的用法。在本例中,作為結果的正則表達式對象又用于match方法中:
- <BR><PRE class =javaname= "code" >functionMatchDemo()
- {
- varr,re; //聲明變量。
- vars= "TheraininSpainfallsmainlyintheplain" ;
- re= new RegExp( "ain" , "g" ); //創建正則表達式對象。
- r=s.match(re); //在字符串s中查找匹配。
- return (r);
- }
- </PRE>
- <BR>
- <BR>返回值:ain,ain,ain,ain//
- <BR>屬性lastIndex屬性|source屬性//
- <BR>方法compile方法|exec方法|test方法//
- <BR>要求版本 3 //
- <BR>請參閱RegExp對象|正則表達式語法|String對象//
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >exec方法</SPAN>
- <BR>用正則表達式模式在字符串中運行查找,并返回包含該查找結果的一個數組。
- <BR>rgExp.exec(str)
- <BR>
- <BR>參數
- <BR>
- <BR>rgExp
- <BR>必選項。包含正則表達式模式和可用標志的正則表達式對象。
- <BR>
- <BR>str
- <BR>必選項。要在其中執行查找的String對象或字符串文字。
- <BR>
- <BR>說明//
- <BR>如果exec方法沒有找到匹配,則它返回 null 。如果它找到匹配,則exec方法返回一個數組,并且更新全局RegExp對象的屬性,以反映匹配結果。數組的 0 元素包含了完整的匹配,而第 1 到n元素中包含的是匹配中出現的任意一個子匹配。這相當于沒有設置全局標志(g)的match方法。
- <BR>如果為正則表達式設置了全局標志,exec從以lastIndex的值指示的位置開始查找。如果沒有設置全局標志,exec忽略lastIndex的值,從字符串的起始位置開始搜索。
- <BR>
- <BR>exec方法返回的數組有三個屬性,分別是input、index和lastIndex。Input屬性包含了整個被查找的字符串。Index屬性中包含了整個被查找字符串中被匹配的子字符串的位置。LastIndex屬性中包含了匹配中最后一個字符的下一個位置。
- <BR>
- <BR>示例//
- <BR>下面的例子舉例說明了exec方法的用法:
- <BR><PRE class =javaname= "code" >functionRegExpTest()
- {
- varver=Number(ScriptEngineMajorVersion()+ "." +ScriptEngineMinorVersion())
- if (ver>= 5.5 ){ //測試JScript的版本。
- varsrc= "TheraininSpainfallsmainlyintheplain." ;
- varre=//w+/g; //創建正則表達式模式。
- vararr;
- while ((arr=re.exec(src))!= null )
- document.write(arr.index+ "-" +arr.lastIndex+arr+ "/t" );
- }
- else {
- alert( "請使用JScript的更新版本" );
- }
- }
- </PRE>
- <BR>
- <BR>返回值: 0 -3The 4 -8rain 9 -11in 12 -17Spain 18 -23falls 24 -30mainly 31 -33in 34 -37the 38 -43plain
- <BR>
- <BR>test方法//
- <BR>返回一個Boolean值,它指出在被查找的字符串中是否存在模式。
- <BR>rgexp.test(str)
- <BR>
- <BR>參數//
- <BR>rgexp
- <BR>必選項。包含正則表達式模式或可用標志的正則表達式對象。
- <BR>
- <BR>str
- <BR>必選項。要在其上測試查找的字符串。
- <BR>
- <BR>說明
- <BR>test方法檢查在字符串中是否存在一個模式,如果存在則返回 true ,否則就返回 false 。
- <BR>全局RegExp對象的屬性不由test方法來修改。
- <BR>
- <BR>示例
- <BR>下面的例子舉例說明了test方法的用法:
- <BR><PRE class =javaname= "code" >functionTestDemo(re,s)
- {
- vars1; //聲明變量。
- //檢查字符串是否存在正則表達式。
- if (re.test(s)) //測試是否存在。
- s1= "contains" ; //s包含模式。
- else
- s1= "doesnotcontain" ; //s不包含模式。
- return ( "'" +s+ "'" +s1+ "'" +re.source+ "'" ); //返回字符串。
- }
- </PRE>
- <BR>
- <BR>函數調用:document.write(TestDemo(/ain+/, "TheraininSpainfallsmainlyintheplain." ));
- <BR>
- <BR>返回值: 'TheraininSpainfallsmainlyintheplain.' contains 'ain+'
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >match方法</SPAN>
- <BR>使用正則表達式模式對字符串執行查找,并將包含查找的結果作為數組返回。//
- <BR>stringObj.match(rgExp)
- <BR>
- <BR>參數//
- <BR>stringObj
- <BR>必選項。對其進行查找的String對象或字符串文字。
- <BR>
- <BR>rgExp
- <BR>必選項。為包含正則表達式模式和可用標志的正則表達式對象。也可以是包含正則表達式模式和可用標志的變量名或字符串文字。
- <BR>
- <BR>說明//
- <BR>如果match方法沒有找到匹配,返回 null 。如果找到匹配返回一個數組并且更新全局RegExp對象的屬性以反映匹配結果。
- <BR>match方法返回的數組有三個屬性:input、index和lastIndex。Input屬性包含整個的被查找字符串。Index屬性包含了在整個被查找字符串中匹配的子字符串的位置。LastIndex屬性包含了最后一次匹配中最后一個字符的下一個位置。
- <BR>如果沒有設置全局標志(g),數組的 0 元素包含整個匹配,而第 1 到n元素包含了匹配中曾出現過的任一個子匹配。這相當于沒有設置全局標志的exec方法。如果設置了全局標志,元素 0 到n中包含所有匹配。
- <BR>
- <BR>示例//
- <BR>下面的示例演示了match方法的用法:
- <BR><PRE class =javaname= "code" >functionMatchDemo()
- {
- varr,re; //聲明變量。
- vars= "TheraininSpainfallsmainlyintheplain" ;
- re=/ain/i; //創建正則表達式模式。
- r=s.match(re); //嘗試匹配搜索字符串。
- return (r); //返回第一次出現"ain"的地方。
- }
- </PRE>
- <BR>返回值:ain
- <BR>
- <BR>本示例說明帶g標志設置的match方法的用法。
- <BR><PRE class =javaname= "code" >functionMatchDemo()
- {
- varr,re; //聲明變量。
- vars= "TheraininSpainfallsmainlyintheplain" ;
- re=/ain/ig; //創建正則表達式模式。
- r=s.match(re); //嘗試去匹配搜索字符串。
- return (r); //返回的數組包含了所有"ain"
- //出現的四個匹配。
- }
- </PRE>
- <BR>返回值:ain,ain,ain,ain
- <BR>
- <BR>上面幾行代碼演示了字符串文字的match方法的用法。
- <BR><PRE class =javaname= "code" >varr,re= "Spain" ;
- r= "TheraininSpain" .replace(re, "Canada" );
- return r;
- </PRE>
- <BR>返回值:TheraininCanada
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >search方法</SPAN>
- <BR>返回與正則表達式查找內容匹配的第一個子字符串的位置。
- <BR>
- <BR>stringObj.search(rgExp)
- <BR>
- <BR>參數//
- <BR>stringObj
- <BR>必選項。要在其上進行查找的String對象或字符串文字。
- <BR>
- <BR>rgExp
- <BR>必選項。包含正則表達式模式和可用標志的正則表達式對象。
- <BR>
- <BR>說明
- <BR>
- <BR>search方法指明是否存在相應的匹配。如果找到一個匹配,search方法將返回一個整數值,指明這個匹配距離字符串開始的偏移位置。如果沒有找到匹配,則返回- 1 。
- <BR>
- <BR>示例//
- <BR>下面的示例演示了search方法的用法。
- <BR><PRE class =javaname= "code" >functionSearchDemo()
- {
- varr,re; //聲明變量。
- vars= "TheraininSpainfallsmainlyintheplain." ;
- re=/falls/i; //創建正則表達式模式。
- r=s.search(re); //查找字符串。
- return (r); //返回Boolean結果。
- }
- </PRE>
- <BR>返回值: 18
- <BR>
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >正則表達式語法</SPAN>
- <BR>一個正則表達式就是由普通字符(例如字符a到z)以及特殊字符(稱為元字符)組成的文字模式。該模式描述在查找文字主體時待匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。
- <BR>
- <BR>這里有一些可能會遇到的正則表達式示例:
- <BR><PRE class =javaname= "code" >JScriptVBScript匹配
- /^/[/t]*$/ "^/[/t]*$" 匹配一個空白行。
- //d{ 2 }-/d{ 5 }/ "/d{2}-/d{5}" 驗證一個ID號碼是否由一個 2 位數字,一個連字符以及一個 5 位數字組成。
- /<(.*)>.*</// 1 >/ "<(.*)>.*<///1>" 匹配一個HTML標記。
- </PRE>
- <BR>
- <BR>下表是元字符及其在正則表達式上下文中的行為的一個完整列表:
- <BR>
- <BR>字符描述
- <BR>/將下一個字符標記為一個特殊字符、或一個原義字符、或一個后向引用、或一個八進制轉義符。例如, 'n' 匹配字符 "n" 。 '/n' 匹配一個換行符。序列 '//' 匹配 "/"而" /( "則匹配" ("。
- <BR>
- <BR>^匹配輸入字符串的開始位置。如果設置了RegExp對象的Multiline屬性,^也匹配 '/n' 或 '/r' 之后的位置。
- <BR>
- <BR>$匹配輸入字符串的結束位置。如果設置了RegExp對象的Multiline屬性,$也匹配 '/n' 或 '/r' 之前的位置。
- <BR>
- <BR>*匹配前面的子表達式零次或多次。例如,zo*能匹配 "z" 以及 "zoo" 。*等價于{ 0 ,}。
- <BR>
- <BR>+匹配前面的子表達式一次或多次。例如, 'zo+' 能匹配 "zo" 以及 "zoo" ,但不能匹配 "z" 。+等價于{ 1 ,}。
- <BR>
- <BR>?匹配前面的子表達式零次或一次。例如, "do(es)?" 可以匹配 "do" 或 "does" 中的 "do" 。?等價于{ 0 , 1 }。
- <BR>
- <BR>{n}n是一個非負整數。匹配確定的n次。例如, 'o{2}' 不能匹配 "Bob" 中的 'o' ,但是能匹配 "food" 中的兩個o。
- <BR>
- <BR>{n,}n是一個非負整數。至少匹配n次。例如, 'o{2,}' 不能匹配 "Bob" 中的 'o' ,但能匹配 "foooood" 中的所有o。 'o{1,}' 等價于 'o+' 。 'o{0,}' 則等價于 'o*' 。
- <BR>
- <BR>{n,m}m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。劉, "o{1,3}" 將匹配 "fooooood" 中的前三個o。 'o{0,1}' 等價于 'o?' 。請注意在逗號和兩個數之間不能有空格。
- <BR>
- <BR>?當該字符緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})后面時,匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對于字符串 "oooo" , 'o+?' 將匹配單個 "o" ,而 'o+' 將匹配所有 'o' 。
- <BR>
- <BR>.匹配除 "/n" 之外的任何單個字符。要匹配包括 '/n' 在內的任何字符,請使用象 '[./n]' 的模式。
- <BR>(pattern)匹配pattern并獲取這一匹配。所獲取的匹配可以從產生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中則使用$ 0 …$ 9 屬性。要匹配圓括號字符,請使用 '/(' 或 '/)' 。
- <BR>
- <BR>(?:pattern)匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以后使用。這在使用 "或" 字符(|)來組合一個模式的各個部分是很有用。例如, 'industr(?:y|ies)就是一個比' industry|industries'更簡略的表達式。
- <BR>
- <BR>(?=pattern)正向預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如, 'Windows(?=95|98|NT|2000)' 能匹配 "Windows2000" 中的 "Windows" ,但不能匹配 "Windows3.1" 中的 "Windows" 。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始。
- <BR>
- <BR>(?!pattern)負向預查,在任何不匹配Negativelookaheadmatchesthesearchstringatanypointwhereastringnotmatchingpattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。例如 'Windows(?!95|98|NT|2000)' 能匹配 "Windows3.1" 中的 "Windows" ,但不能匹配 "Windows2000" 中的 "Windows" 。預查不消耗字符,也就是說,在一個匹配發生后,在最后一次匹配之后立即開始下一次匹配的搜索,而不是從包含預查的字符之后開始
- <BR>
- <BR>x|y匹配x或y。例如, 'z|food' 能匹配 "z" 或 "food" 。 '(z|f)ood' 則匹配 "zood" 或 "food" 。
- <BR>
- <BR>[xyz]字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 "plain" 中的 'a' 。
- <BR>
- <BR>[^xyz]負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的 'p' 。
- <BR>
- <BR>[a-z]字符范圍。匹配指定范圍內的任意字符。例如, '[a-z]' 可以匹配 'a' 到 'z' 范圍內的任意小寫字母字符。
- <BR>
- <BR>[^a-z]負值字符范圍。匹配任何不在指定范圍內的任意字符。例如, '[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內的任意字符。
- <BR>
- <BR>/b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er/b' 可以匹配 "never" 中的 'er' ,但不能匹配 "verb" 中的 'er' 。
- <BR>
- <BR>/B匹配非單詞邊界。 'er/B' 能匹配 "verb" 中的 'er' ,但不能匹配 "never" 中的 'er' 。
- <BR>
- <BR>/cx匹配由x指明的控制字符。例如,/cM匹配一個Control-M或回車符。x的值必須為A-Z或a-z之一。否則,將c視為一個原義的 'c' 字符。
- <BR>
- <BR>/d匹配一個數字字符。等價于[ 0 - 9 ]。
- <BR>
- <BR>/D匹配一個非數字字符。等價于[^ 0 - 9 ]。
- <BR>
- <BR>/f匹配一個換頁符。等價于/x0c和/cL。
- <BR>
- <BR>/n匹配一個換行符。等價于/x0a和/cJ。
- <BR>
- <BR>/r匹配一個回車符。等價于/x0d和/cM。
- <BR>
- <BR>/s匹配任何空白字符,包括空格、制表符、換頁符等等。等價于[/f/n/r/t/v]。
- <BR>
- <BR>/S匹配任何非空白字符。等價于[^/f/n/r/t/v]。
- <BR>
- <BR>/t匹配一個制表符。等價于/x09和/cI。
- <BR>
- <BR>/v匹配一個垂直制表符。等價于/x0b和/cK。
- <BR>
- <BR>/w匹配包括下劃線的任何單詞字符。等價于 '[A-Za-z0-9_]' 。
- <BR>
- <BR>/W匹配任何非單詞字符。等價于 '[^A-Za-z0-9_]' 。
- <BR>
- <BR>/xn匹配n,其中n為十六進制轉義值。十六進制轉義值必須為確定的兩個數字長。例如, '/x41' 匹配 "A" 。 '/x041' 則等價于 '/x04' & "1" 。正則表達式中可以使用ASCII編碼。.
- <BR>
- <BR>/num匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如, '(.)/1' 匹配兩個連續的相同字符。
- <BR>
- <BR>/n標識一個八進制轉義值或一個后向引用。如果/n之前至少n個獲取的子表達式,則n為后向引用。否則,如果n為八進制數字( 0 - 7 ),則n為一個八進制轉義值。
- <BR>
- <BR>/nm標識一個八進制轉義值或一個后向引用。如果/nm之前至少有isprecededbyatleastnm個獲取得子表達式,則nm為后向引用。如果/nm之前至少有n個獲取,則n為一個后跟文字m的后向引用。如果前面的條件都不滿足,若n和m均為八進制數字( 0 - 7 ),則/nm將匹配八進制轉義值nm。
- <BR>
- <BR>/nml如果n為八進制數字( 0 - 3 ),且m和l均為八進制數字( 0 - 7 ),則匹配八進制轉義值nml。
- <BR>
- <BR>/un匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。例如,/u00A9匹配版權符號(?)。
- <BR>
- <BR>
- <BR><SPANstyle= "FONT-SIZE:18pt" >優先權順序</SPAN>
- <BR>在構造正則表達式之后,就可以象數學表達式一樣來求值,也就是說,可以從左至右并按照一個優先權順序來求值。
- <BR>
- <BR>下表從最高優先級到最低優先級列出各種正則表達式操作符的優先權順序:
- <BR><PRE class =javaname= "code" >操作符描述
- /轉義符
- (),(?:),(?=),[]圓括號和方括號
- *,+,?,{n},{n,},{n,m}限定符
- ^,$,/anymetacharacter位置和順序
- |“或”操作
- </PRE>
- <BR>
- <BR>普通字符
- <BR>
- <BR>普通字符由所有那些未顯式指定為元字符的打印和非打印字符組成。這包括所有的大寫和小寫字母字符,所有數字,所有標點符號以及一些符號。
- <BR>
- <BR>最簡單的正則表達式是一個單獨的普通字符,可以匹配所搜索字符串中的該字符本身。例如,單字符模式 'A' 可以匹配所搜索字符串中任何位置出現的字母 'A' 。這里有一些單字符正則表達式模式的示例:
- <BR><PRE class =javaname= "code" >/a/
- / 7 /
- /M/
- </PRE>
- <BR>等價的VBScript單字符正則表達式為:
- <BR><PRE class =javaname= "code" > "a"
- "7"
- "M"
- </PRE>
- <BR>可以將多個單字符組合在一起得到一個較大的表達式。例如,下面的JScript正則表達式不是別的,就是通過組合單字符表達式 'a' 、 '7' 以及 'M' 所創建出來的一個表達式。
- <BR>
- <BR>/a7M/
- <BR>等價的VBScript表達式為:
- <BR>
- <BR> "a7M"
- <BR>請注意這里沒有連接操作符。所需要做的就是將一個字符放在了另一個字符后面。
- <BR>
- <BR>
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
