官术网_书友最值得收藏!

7.3 RegExp對象

在JavaScript中,正則表達式是由RegExp對象表示的。利用RegExp對象可以完成有關正則表達式的操作和功能。

7.3.1 創(chuàng)建RegExp對象

每個正則表達式模式都對應一個RegExp實例。有兩種方式可以創(chuàng)建RegExp對象的實例,下面分別進行介紹。

(1)使用RegExp的顯式構(gòu)造函數(shù)

語法格式:

    new RegExp("pattern"[,"flags"])  //即new RegExp(" 模式 "[," 標記 "])

(2)使用RegExp的隱式構(gòu)造函數(shù),采用純文本格式

語法格式:

    /pattern/[flags]

Pattern參數(shù)為要使用的正則表達式模式文本,是必選項。在第一種方式中,pattern部分以JavaScript字符串的形式存在,需要使用雙引號或單引號括起來;在第二種方式中,pattern部分嵌套在兩個“/”之間,不能使用引號。

Flags參數(shù)用于設置正則表達式的標志信息,是可選項。如果設置flags部分,在第一種方式中,以字符串的形式存在;在第二種方式中,以文本的形式緊接在最后一個“/”字符之后。flags可以是以下標志字符的組合。

g是全局標志。如果設置了這個標志,對某個文本執(zhí)行搜索和替換操作時,將對文本中所有匹配的部分起作用。如果不設置這個標志,則僅搜索和替換最早匹配的內(nèi)容。

i是忽略大小寫標志。如果設置了這個標志,進行匹配比較時,將忽略大小寫。

m是多行標志。如果未設置多行標志,那么元字符“^”只與整個被搜索字符串的開始位置相匹配,元字符“$”只與被搜索字符串的結(jié)束位置相匹配。如果設置了多行標志,“^”還可以與被搜索字符串中的“\n”或“\r”之后的位置(即下一行的行首)相匹配,“$”還可以與被搜索字符串中的“\n”或“\r”之后的位置(即下一行的行尾)相匹配。

注意

文本格式中的參數(shù)不要使用引號標記,構(gòu)造器函數(shù)的參數(shù)要使用引號標記。所以,下面兩個表達式建立的是同樣的正則表達式。

    /ab+c/i
    new RegExp("ab+c","i")

當使用構(gòu)造函數(shù)時,使用正常的字符串避開規(guī)則(在字符串中加入前導字符“\”)是必需的。例如,下面的兩條語句是等價的:

    re = new RegExp("\\w+")
    re = /\w+/

【例7.6】 創(chuàng)建正則表達式。(實例位置:資源包\TM\sl\7\06)

運行結(jié)果如圖7.6所示。

圖7.6 創(chuàng)建正則表達式

代碼如下:

由于JavaScript字符串中“\”是一個轉(zhuǎn)義字符,因此,使用顯式構(gòu)造函數(shù)創(chuàng)建RegExp實例對象時,應將原始正則表達式中的“\”用“\\”替換,例如:

運行結(jié)果:

    re1=/\d{2}/
    re2=/\d{2}/

由于正則表達式模式文本中的轉(zhuǎn)義字符也是“\”,因此,如果正則表達式中要匹配原義字符“\”,在正則表達式模式文本中要以“\\”來表示;當使用顯式構(gòu)造函數(shù)的方式創(chuàng)建RegExp實例對象時,就需要使用“\\\\”來表示原義字符“\”,例如:

    var re = new RegExp("\\\\")

7.3.2 RegExp對象的屬性

RegExp對象的屬性分為靜態(tài)屬性和實例屬性,下面分別進行介紹。

1.靜態(tài)屬性

RegExp對象的靜態(tài)屬性包括index、input、lastIndex、lastMatch、lastParen、leftContext、rightContext以及$1…$9。

index屬性:是當前表達式模式首次匹配內(nèi)容的開始位置,從0開始計數(shù)。其初始值為-1,每次成功匹配時,index屬性都會隨之改變。

input屬性:返回當前所作用的字符串,可以簡寫為$_,初始值為空字符串("")。

lastIndex屬性:當前表達式模式首次匹配內(nèi)容中最后一個字符的下一個位置。從0開始計數(shù),常被作為繼續(xù)搜索時的起始位置。初始值為-1,表示從起始位置開始搜索。每次成功匹配時,lastIndex屬性值都會隨之改變。

lastMatch屬性:當前表達式模式的最后一個匹配字符串,可以簡寫為$&。其初始值為空字符串("")。每次成功匹配時,lastMatch屬性值都會隨之改變。

lastParen屬性:如果表達式模式中有括起來的子匹配,是當前表達式模式中最后的子匹配所匹配到的子字符串,可以簡寫為$+。其初始值為空字符串("")。每次成功匹配時,lastParen屬性值都會隨之改變。

leftContext屬性:當前表達式模式最后一個匹配字符串左邊的所有內(nèi)容,可以簡寫為$`(其中“`”為鍵盤上Esc鍵下邊的反單引號)。初始值為空字符串("")。每次成功匹配時,其屬性值都會隨之改變。

rightContext屬性:當前表達式模式最后一個匹配字符串右邊的所有內(nèi)容,可以簡寫為$’。初始值為空字符串("")。每次成功匹配時,其屬性值都會隨之改變。

$1…$9屬性:這些屬性是只讀的。如果表達式模式中有括起來的子匹配,$1…$9屬性值分別是第1~9個子匹配所捕獲到的內(nèi)容。如果有超過9個以上的子匹配,$1…$9屬性分別對應最后的9個子匹配。在一個表達式模式中,可以指定任意多個帶括號的子匹配,但RegExp對象只能存儲最后9個子匹配的結(jié)果。在RegExp實例對象一些方法返回的結(jié)果數(shù)組中,可以獲得所有圓括號內(nèi)的子匹配結(jié)果。

2.實例屬性

RegExp的實例有幾個只讀的屬性,其中global表示是否為全局匹配,ignoreCase表示是否忽略大小寫,multiline表示是否為多行匹配,source是正則式的源文本,如“/[ab]/g”的源文本就是“[ab]”。另外,還有一個可寫的屬性是lastIndex,表示下次執(zhí)行匹配時的起始位置。下面對這幾種屬性進行詳細說明。

global屬性:返回創(chuàng)建RegExp對象實例時指定的global標志(g)的狀態(tài)。如果創(chuàng)建RegExp對象實例時設置了g標志,該屬性返回true,否則返回false,默認值為false。

ignoreCase屬性:返回創(chuàng)建RegExp對象實例時指定的ignoreCase標志(i)的狀態(tài)。如果創(chuàng)建RegExp對象實例時設置了i標志,該屬性返回true,否則返回false,默認值為false。

multiline屬性:返回創(chuàng)建RegExp對象實例時指定的multiline標志(m)的狀態(tài)。如果創(chuàng)建RegExp對象實例時設置了m標志,該屬性返回true,否則返回false,默認值為false。

source屬性:返回創(chuàng)建RegExp對象實例時指定的表達式文本字符串。

7.3.3 RegExp對象的方法

1.exec()方法

exec()方法用正則表達式模式在字符串中進行查找,并返回包含該查找結(jié)果的一個數(shù)組。

語法格式:

    rgExp.exec(str)

參數(shù)說明:

rgExp:必選項,包含正則表達式模式和可用標志的正則表達式對象。

str:必選項,要在其中執(zhí)行查找的String對象或字符串文字。

如果exec()方法沒有找到匹配,則返回null;如果找到匹配,則返回一個數(shù)組,并更新全局RegExp對象的屬性,以反映匹配結(jié)果。數(shù)組的0元素包含了完整的匹配,而第1~n元素中包含的是匹配中出現(xiàn)的任意一個子匹配。這相當于沒有設置全局標志(g)的match()方法。

如果為正則表達式設置了全局標志,exec()方法將從lastIndex值指示的位置開始查找;如果沒有設置全局標志,exec()方法將忽略lastIndex的值,從字符串的起始位置開始搜索。

exec()方法返回的數(shù)組有兩個屬性,分別是input和index。input屬性包含了整個被查找的字符串,index屬性包含了整個被查找字符串中符合匹配的子字符串的位置。

例如,下面應用exec()方法來返回一個數(shù)組,代碼如下:

運行結(jié)果:

    0-1I 2-3m 4-5a 6-10good 11-14boy
2.test()方法

test()方法返回一個Boolean值,指出在被查找的字符串中是否存在模式。

語法格式:

    rgexp.test(str)

參數(shù)說明:

rgexp:必選項,表示包含正則表達式模式或可用標志的正則表達式對象。

str:必選項,表示要在其上測試查找的字符串。

說明

test()方法用于檢查字符串中是否存在某個模式,如果存在則返回true,否則返回false。test()方法不修改全局RegExp對象的屬性。

例如,下面應用test()方法查詢指定字符串是否存在,代碼如下:

函數(shù)調(diào)用語句:

    document.write (TestDemo(/boy+/ ,"I am a good boy !"));

運行結(jié)果:

    'I am a good boy !' contains 'boy+'
主站蜘蛛池模板: 兴国县| 丰都县| 娱乐| 冷水江市| 虎林市| 嘉祥县| 泰安市| 漳州市| 定西市| 获嘉县| 嘉善县| 杭锦后旗| 藁城市| 瑞金市| 永吉县| 拉萨市| 滨海县| 许昌县| 宁远县| 峨眉山市| 容城县| 正阳县| 惠来县| 阜阳市| 含山县| 绥中县| 肇源县| 江华| 临夏市| 滦平县| 江孜县| 攀枝花市| 闽清县| 香港| 富顺县| 玉环县| 天峻县| 上高县| 商城县| 开阳县| 丘北县|