JS test()方法:檢測一個字串是否匹配某個正規表示式

2020-07-16 10:05:03
JavaScript 正規表示式中的 test() 方法用來檢測一個字串是否匹配某個正規表示式

test() 方法的具體格式如下:

regexp.test(string)

regexp 表示正規表示式物件,引數 string 表示要檢測的字串。如果字串 string 中含有與 regexp 正規表示式匹配的文字,則返回 true;否則返回 false。

範例1

在下面範例中,使用 test() 方法檢測字串中是否包含字元。
var s = "JavaScript";
var r = /w/g;
var b = r.test(s);
同樣使用下面正規表示式也能夠進行匹配,並返回true。
var r = /JavaScript/g;
var b = r.test(s);
但是如果使用下面這個正規表示式進行匹配,就會返回 false,因為在字串“JavaScript”中找不到對應的匹配。
var r = /d/g;
var b = r.test(s);
在全域性模式下,test() 等價於 exec() 方法。配合迴圈語句,它們都能夠疊代字串,執行全域性匹配操作,test() 返回布林值,exec() 返回陣列或者 null。雖然 test() 方法的返回值是布林值,但是通過正規表示式物件的屬性和 RegExp 靜態屬性,依然可以獲取到每次疊代操作的匹配資訊。

範例2

針對上面範例,下面使用 test() 方法代替 exec() 方法可以實現相同的設計效果。
var s = "JavaScript";  //測試字串
var r = /w/g;  //匹配模式
while(r.test(s)) {  //迴圈執行匹配檢測,如果true,則繼續驗證
    console.log("匹配文字 = " + RegExp.lastMatch + " r.lastIndex = " + r.lastIndex);
    //利用RegExp靜態屬性顯示當前匹配的資訊
}
RegExp.lastMatch 記錄了每次匹配的文字,正規表示式物件的 lastIndex 屬性記錄下一次匹配的起始位置。

使用 test() 執行匹配時,IE 支援 RegExp.index 記錄了匹配文字的起始下標位置、Regexp.lastIndex 記錄下一次匹配的起始位置,但是其他瀏覽器不支援。

除了正規表示式內建方法外,字串物件中很多方法也支援正規表示式的模式匹配操作,下面列表比較了字串物件和正規表示式物件包含的 6 種模式匹配的方法,如表所示。

比較各種模式匹配的方法
方法 所屬物件 引數 返回值 通用性 特殊性
exec() 正規表示式 字串 匹配結果的陣列。如果沒有找到,返回值為 null 通用強大 一次只能匹配一個單元,並提供詳細的返回資訊
test() 正規表示式 字串 布林值,表示是否匹配 快速驗證 一次只能匹配一個單元,返回資訊與 exec() 方法基本相似
search() 字串 正規表示式 匹配起始位置。如果沒有找到任何匹配的字串,則返回 -1 簡單字元定位 不執行全域性匹配,將忽略標誌 g,也會忽略正規表示式的 lastIndex 屬性
match() 字串 正規表示式 匹配的陣列,或者匹配資訊的陣列 常用字元匹配方法 將根據全域性模式的標誌 g 決定匹配操作的行為
replace() 字串 正規表示式或替換文字 返回替換後的新字串 匹配替換操作 可以支援替換函數,同時可以獲取更多匹配資訊
split() 字串 正規表示式或分割字元 返回陣列 特殊用途 把字串分隔為字串陣列