正則表達式對象和RegExp對象
正則表達式對象保存用于查找字符串中的字符組合時(shí)的模式。創(chuàng )建正則表達式對象后,或者它被傳遞給字符串方法,或者字符串被傳遞給一個(gè)正則表達式方法。有關(guān)最近進(jìn)行查找的信息被保存在 RegExp 對象中。
創(chuàng )建正則表達式對象有兩種方法。如果預先知道要查找的字符串時(shí),用語(yǔ)法1:
var regularexpression = /pattern/[switch]
當查找字符串經(jīng)常變動(dòng)或不知道時(shí)用語(yǔ)法2:
var regularexpression = new RegExp("pattern",["switch"])
pattern是要查找的字符串,在語(yǔ)法1中用斜杠括起來(lái),而在語(yǔ)法2中有引號。switch是開(kāi)關(guān),有三種選擇,"i" 表示忽略大小寫(xiě),"g" 表示全文查找出現的所有pattern,"gi" 表示兩者都要,即全文查找并忽略大小寫(xiě)。
執行查找
在創(chuàng )建了正則表達式對象后,要執行查找用exec方法,語(yǔ)法:
rgexp.exec(str)
rgexp是正則表達式對象,可以是變量名或文字。str是被查找的字符串。例如,
var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp";
var r = new RegExp("g", "i");
var a = r.exec(s);
document.write(a); //顯示G
因為忽略大小寫(xiě),執行搜索后第一個(gè)匹配的是G,所以變量a="G"。
exec方法查找的結果被放在一個(gè)數組中。如果 exec 方法沒(méi)有找到匹配,則它返回 null。如果它找到一個(gè)或多個(gè)匹配,則exec 方法返回一個(gè)數組,并且更新 RegExp 對象,來(lái)反映查找結果。在RegExp 對象的屬性 $1, ...$9 中保存最近的九個(gè)結果。無(wú)論何時(shí)產(chǎn)生一個(gè)成功的帶插入語(yǔ)的匹配,$1...$9 屬性的值都被修改,但是只有最近的九個(gè)可以被保存起來(lái)。測試正則表達式模式
可以用test方法來(lái)測試正則表達式在被查字符串的中是否存在。語(yǔ)法
rgexp.test(str)語(yǔ)法與exec方法一樣。它返回一個(gè)Boolean值,如果存在就返回true,否則返回false。test 方法不修改RegExp對象中的信息。
RegExp對象和它的屬性
RegExp對象用于保存對正則表達式模式查找的信息,這些信息保持在它的屬性中。RegExp對象沒(méi)有方法。一般語(yǔ)法是RegExp.propertyname
propertyname 參數是RegExp對象的一個(gè)屬性。RegExp對象有下列屬性:
$1-$9 屬性 返回九個(gè)在模式匹配期間找到的、最近保存的部分。只讀。
RegExp.index 返回第一個(gè)成功匹配的字符串的開(kāi)始位置。
RegExp.lastIndex 返回字符位置,它是被查找字符串中最后一次成功匹配的開(kāi)始位置。
RegExp.input 返回執行查找的字符串。只讀。
下面的規則應用于 lastIndex 的值:
例程1 下面的代碼用來(lái)考察上述屬性的內容。
function RegexpDemo(reg, str){
var re = new RegExp(reg ,"gi");
var a = re.exec(str);
var BR = "<br>";
if (re.test(str))
document.write ("找到的第一個(gè)匹配的字符串是" +a + BR);
document.write ("第一個(gè)匹配位置是" +RegExp.index+ BR);
document.write ("最后一個(gè)匹配位置是" +RegExp.lastIndex+ BR);
document.write ("被查找的文本是:" +BR +RegExp.input+ BR);
document.write ("$1=" + RegExp.$1);
};
var str = "The built-in objects are special because they are built into ASP pages and do not need to be created before you can use them in scripts.";
var reg = "(OBJECT)";
document.write ("查找" + reg + "<br>");
RegexpDemo(reg, str+str);
說(shuō)明 查找的字符串OBJECT加括號,$1有值。如果不加括號,$1是空串。什么道理? 我也不知道。
正則表達式對象的屬性
正則表達式對象有兩個(gè)屬性屬性。lastIndex屬性指定索引,下一個(gè)匹配從該索引處開(kāi)始。語(yǔ)法:
rgexp.lastIndex [= index]請參照RegExp對象的lastIndex屬性。
source屬性返回正則表達式模式的文本的復本,只讀。語(yǔ)法:
rgexp.source
下面的例子說(shuō)明了source 屬性的用法:
function SourceDemo(re, s){var s1;// 測試字符串中是否存在正則表達式。if (re.test(s))s1 = " contains ";elses1 = " does not contain ";// 獲得正則表達式自己的文本。return(s + s1 + re.source);RegExp.input 是返回被查找的字符串,而source是返回要查找的字符串。
正則表達式對象的compile方法
正則表達式模式pattern 參數在使用前被編譯為內部格式。對語(yǔ)法1 來(lái)說(shuō),pattern 在該腳本裝載時(shí)被編譯。對語(yǔ)法2 來(lái)說(shuō),pattern 在使用前,或調用compile方法時(shí)被編譯。compile方法把pattern轉換為內部格式,從而執行得更快。這使得在循環(huán)中可更有效地使用正則表達式。語(yǔ)法如下:
rgexp.compile(pattern)
下面的例子說(shuō)明了compile 方法的用法:
function CompileDemo(){var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp"http:// 只為大寫(xiě)字母創(chuàng )建正則表達式。var r = new RegExp("[A-Z]", "g");var a = s.match(r) // 查找匹配。 document.write(a);r.compile("[a-z]", "g");// 只為小寫(xiě)字母編譯正則表達式。var a = s.match(r) // 查找匹配。document.write(a);}代碼注釋
match是String對象的一個(gè)方法,其功能是使用正則表達式對象對字符串進(jìn)行查找,并將結果作為數組返回。語(yǔ)法:
stringObj.match(rgExp)match 方法與RegExp.exec 方法有些相似,將返回一個(gè)數組。該數組的元素0 包含最后匹配的字符,元素 1...n 包含與正則表達式中任何用插入符分開(kāi)的子字符串匹配的內容。該方法將更新RegExp 對象的內容。
下面的示例演示了match方法的用法:
function MatchDemo(){var r, re;var s = "The quick brown fox jumped over the lazy yellow dog.";re = /fox/i;r = s.match(re);return(r);}VBscript中的正則表達式
在VBscript中,正則表達式對象就是RegExp對象。RegExp對象有3個(gè)屬性:
RegExp對象有3種方法:
這里object是已定義的正則表達式,string是被搜索的文本。要查找的是用Pattern描述的正則表達式模式。
例程1 創(chuàng )建一個(gè)正則表達式,并演示替換方法。
Function ReplaceTest(patrn, replStr)Dim regEx, str1str1 = "The quick brown fox jumped over the lazy dog."Set regEx = New RegExpregEx.Pattern = patrnregEx.IgnoreCase = TrueReplaceTest = regEx.Replace(str1, replStr)End FunctionMsgBox(ReplaceTest("fox", "cat"))這個(gè)例程請讀者自己拷貝下來(lái)運行。Match對象和Matches集合
只能通過(guò) RegExp 對象的Execute 方法來(lái)創(chuàng )建,該方法實(shí)際上返回了Match 對象的集合Matches。所有的Match 對象屬性都是只讀的。每個(gè)Match 對象提供了被正則表達式搜索找到的匹配字符串的開(kāi)始位置、長(cháng)度,字符串本身等信息,通過(guò)Match對象的屬性供用戶(hù)訪(fǎng)問(wèn)。
例程2 創(chuàng )建一個(gè)正則表達式,執行搜索,并顯示每一個(gè)匹配的結果。
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = True
regEx.Global = True
Set Matches = regEx.Execute(strng)
For Each Match in Matches
RetStr = RetStr & "Match " & Match & " found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is "
RetStr = RetStr & Match.Value & "'." & "<br>"
Next
RegExpTest = RetStr
End Function
document.write (RegExpTest("is.", "IS1 is2 IS3 is4"))
兩種語(yǔ)言正則表達式的用法對照表
| VBscript的RegExp對象 | Javascript的正則表達式 |
| IgnoreCase屬性 | 創(chuàng )建語(yǔ)法中的開(kāi)關(guān)switch ="i" |
| Global屬性 | 創(chuàng )建語(yǔ)法中的開(kāi)關(guān)switch ="g" |
| Pattern屬性 | 創(chuàng )建語(yǔ)法中的Pattern參數 |
| matchs對象集合 | 屬性$1 - $9 |
| Execute方法 | exec方法 |
| Test方法 | test方法 |
| Replace方法 | 沒(méi)有對應方法,但有字符串對象的replace方法 |
| 沒(méi)有對應的方法 | compile方法 |
| 沒(méi)有對應的屬性 | source屬性 |
有許多用于正則表達式模式的特殊字符,這在兩種語(yǔ)言中是一樣的。詳情見(jiàn)相關(guān)文章。
文 東方一峰 2002-12-27
http://www.shps.cn/developweb/webSchool/VBJAVA/VBJjc016.htm
聯(lián)系客服