JavaScript exec() 方法
定義和用法
exec() 方法用于檢索字符串中的正則表達(dá)式的匹配。
語(yǔ)法
RegExpObject.exec(string)
參數(shù) | 描述 |
---|---|
string | 必需。要檢索的字符串。 |
返回值
返回一個(gè)數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配,則返回值為 null。
說(shuō)明
exec() 方法的功能非常強(qiáng)大,它是一個(gè)通用的方法,而且使用起來(lái)也比 test() 方法以及支持正則表達(dá)式的 String 對(duì)象的方法更為復(fù)雜。
如果 exec() 找到了匹配的文本,則返回一個(gè)結(jié)果數(shù)組。否則,返回 null。此數(shù)組的第 0 個(gè)元素是與正則表達(dá)式相匹配的文本,第 1 個(gè)元素是與 RegExpObject 的第 1 個(gè)子表達(dá)式相匹配的文本(如果有的話),第 2 個(gè)元素是與 RegExpObject 的第 2 個(gè)子表達(dá)式相匹配的文本(如果有的話),以此類推。除了數(shù)組元素和 length 屬性之外,exec() 方法還返回兩個(gè)屬性。index 屬性聲明的是匹配文本的第一個(gè)字符的位置。input 屬性則存放的是被檢索的字符串 string。我們可以看得出,在調(diào)用非全局的 RegExp 對(duì)象的 exec() 方法時(shí),返回的數(shù)組與調(diào)用方法 String.match() 返回的數(shù)組是相同的。
但是,當(dāng) RegExpObject 是一個(gè)全局正則表達(dá)式時(shí),exec() 的行為就稍微復(fù)雜一些。它會(huì)在 RegExpObject 的 lastIndex 屬性指定的字符處開(kāi)始檢索字符串 string。當(dāng) exec() 找到了與表達(dá)式相匹配的文本時(shí),在匹配后,它將把 RegExpObject 的 lastIndex 屬性設(shè)置為匹配文本的最后一個(gè)字符的下一個(gè)位置。這就是說(shuō),您可以通過(guò)反復(fù)調(diào)用 exec() 方法來(lái)遍歷字符串中的所有匹配文本。當(dāng) exec() 再也找不到匹配的文本時(shí),它將返回 null,并把 lastIndex 屬性重置為 0。
提示和注釋
重要事項(xiàng):如果在一個(gè)字符串中完成了一次模式匹配之后要開(kāi)始檢索新的字符串,就必須手動(dòng)地把 lastIndex 屬性重置為 0。
提示:請(qǐng)注意,無(wú)論 RegExpObject 是否是全局模式,exec() 都會(huì)把完整的細(xì)節(jié)添加到它返回的數(shù)組中。這就是 exec() 與 String.match() 的不同之處,后者在全局模式下返回的信息要少得多。因此我們可以這么說(shuō),在循環(huán)中反復(fù)地調(diào)用 exec() 方法是唯一一種獲得全局模式的完整模式匹配信息的方法。
實(shí)例
在本例中,我們將全局檢索字符串中的 w3school:
<script type="text/javascript"> var str = "Visit w3school"; var patt = new RegExp("w3school","g"); var result; while ((result = patt.exec(str)
) != null) { document.write(result); document.write("<br />"); document.write(result.lastIndex
); } </script>
輸出:
w3school 14
TIY
- exec()
- 如何使用 exec() 來(lái)檢索字符串。