RegExp對象的主要方法是exec(),該方法是專門為捕獲組而設(shè)計的。exec()接受一個參數(shù),即要應(yīng)用模式的字符串,然后返回包含第一個匹配項信息的數(shù)組;或者在沒有匹配項的情況下返回null。返回的數(shù)組雖然是Array的實例,但包含兩個額外的屬性:index和input。其中,index表示匹配項在字符串中的位置,而input表示應(yīng)用正則表達式的字符串。在數(shù)組中,第一項是與整個模式匹配的字符串,其他項是與模式中的捕獲組匹配的字符串(如果模式中沒有捕獲組,則該數(shù)組只包含一項)。請看下面的例子:
var text="mom and dad and baby";
var pattern=/mom( and dad( and baby)?)?/gi;
var matches=pattern.exec (text);
alert (matches.index); //O
alert {matches.input); //¨mom and dad and baby"
alert (matches[O]); //"mom and dad and baby"
alert (matches[1]); //”and dad and baby"
alert (matches[2]); //”and baby"
這個例子中的模式包含兩個捕獲組。最內(nèi)部的捕獲組匹配"and baby”,而包含它的捕獲組匹配”and dad”或者"and dad and baby”。當(dāng)把字符串傳人exec()方法中之后,發(fā)現(xiàn)了一個匹配項?!驗檎麄€字符串本身與模式匹配,所以返回的數(shù)組matchs的index屬性值為0。數(shù)組中的第一項是匹配的整個字符串,第二項包含與第一個捕獲組匹配的內(nèi)容,第三項包含與第二個捕獲組匹配的內(nèi)容。
對于exec()方法而言,即使在模式中設(shè)置了全局標(biāo)志(g),它每次也只會返回一個匹配項。在不設(shè)置全局標(biāo)志的情況下,在同一個字符串上多次調(diào)用exec()將始終返回第一個匹配項的信息。而在設(shè)置全局標(biāo)志的情況下,每次調(diào)用exec()則都會在字符串中繼續(xù)查找新匹配項,如下面的例子所示:
var text="cat, bat, sat, fat";
var patternl=/.at/;
var matches=patternl.exec(text);
alert (matches.index); //0
alert (matches[0]); //cat
alert (patternl.lastlndex);//o
matches =patternl.exec(text);
alert (matches .index)j //0
alert (matches[O]); //cat
alert (patternl.lastlndex); //0
var pattern2=/.at/g;
var matches=pattern2 .exec (text);
alert (matches .index); //o
alert (matches[0]); //cat
alert (pattern2 .lastlndex); //0
matches=pattern2.exec (text);
alert (matches .index); //5
alert (matches[0]); //bat
alert (pattern2 .lastlndex); //8
這個例子中的第一個模式patternl不是全局模式,因此每次調(diào)用exec()返回的都是第一個匹配項(”cat”)。而第二個模式pattern2是全局模式,因此每次調(diào)用exec()都會返回字符串中的下一個匹配項,直至搜索到字符串末尾為止。此外,還應(yīng)該注意模式的las tlndex屬性的變化情況。在全局匹配模式下,las tlndex的值在每次調(diào)用exec()后都會增加,而在非全局模式下則始終保持不變。
南昌網(wǎng)站制作公司前端開發(fā)工程師提醒IE 的JavaScript實現(xiàn)在lastlndex屬性上存在偏差,即使在非全局模式下,LastIndex屬性每次也會變。
正則表達式的第二個方法是test(),它接受一個字符串參數(shù)。在模式與該參數(shù)匹配的情況下返回true;否則,返回fa-se。在只想知道目標(biāo)字符串與某個模式是否匹配,但不需要知道其文本內(nèi)容的情況下,使用這個方法非常方便:因此,test()方法經(jīng)常被用在if語句中,如下面的例子所示:
var text="000-00-000:
var patter== /d{3}-d{2}-d{4}/;
if (patter.test(text))
alert ("The pattern was matched.");
在這個例子中,我們使用正則表達式來測試了一個數(shù)字序列。如果輸入的文本與模式匹配,則顯示一條消息。這種用法經(jīng)常出現(xiàn)在驗證用戶輸入的情況下,因為我們只想知道輸入是不是有效,至于它為什么無效就無關(guān)緊要了:
RegExp實例繼承的:o oca-eString()和toString()方法都會返回正則表達式的字面量,與創(chuàng)建正則表達式的方式無關(guān)。例如:
var pattern=new Reg_x:'{"\[bc\]at”, ”gi”);
alert (pattern.toString()); ,//[bc]at/gi
alert(pattern.toLocaleSting{)); ///[bc]at/gi
即使上例中的模式是通過調(diào)用RegExp構(gòu)造函數(shù)創(chuàng)建的,但toLocaleString()和toString()方法仍然會像它是以字面量形式創(chuàng)建的一樣顯示其字符串表示。
南昌做網(wǎng)站公司工程師提示,正則表達式valueOf()方法返回正則表表達式本身。之所以會出現(xiàn)這種奇怪的問題,部分原因是標(biāo)準(zhǔn)沒有就該訪法應(yīng)該返回什么做出明確規(guī)定。
希望本文對廣大站長或從事企業(yè)網(wǎng)站建設(shè)公司的團隊有所幫助,如對此不太理解的,可以與南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)技術(shù)部聯(lián)系。我們很高興與廣大站長和從事企業(yè)網(wǎng)站建設(shè)公司技術(shù)人員分享我們的技術(shù)和經(jīng)驗。