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