摘要:類型通過類型來支持正則表達(dá)式。如由于構(gòu)造函數(shù)的模式參數(shù)是字符串,所以在某些情況下要對字符串進(jìn)行雙重轉(zhuǎn)義。而第二個循環(huán)使用構(gòu)造函數(shù)在每次循環(huán)沖創(chuàng)建正則表達(dá)式。如另外,還有個用于存儲捕獲組的構(gòu)造函數(shù)屬性。
EegExp 類型
ECMAScript 通過RegExp 類型來支持正則表達(dá)式。語法如下:
var expression = / pattern / flags;
每個正則表達(dá)式都可帶有一或多個標(biāo)志(flags),正則表達(dá)式的匹配模式支持下列3 個標(biāo)志。
g:表示全局(global)模式,該模式將被應(yīng)用于所有字符串,而非在發(fā)現(xiàn)第一個匹配項時立即停止;
i:表示不區(qū)分大小寫(case-insensitive)模式,該模式在確定匹配項時忽略模式與字符串的大小寫;
m:表示多行(multiline)模式,在到達(dá)一行文本末尾時還會繼續(xù)查找下一行中是否存在與模式匹配的項;
如:
var pattern1 = /at/g; //匹配字符串中所有“at”的實例
var pattern2 = /[bc]at/i; //匹配字符串第一個“bat”或“cat”,不區(qū)分大小寫
var pattern3 = /.at/gi; //匹配字符串中所有以“at”結(jié)尾的3個字符串的組合,不區(qū)分大小寫
與其他語言中的正則表達(dá)式類似,模式中使用的所有元字符都必須轉(zhuǎn)義。正則表達(dá)式中的元字符包括:
( [ { ^ $ | ? * + . ] )
如:
var pattern1 = /[bc]at/i; //匹配第一個“[bc]at”,不區(qū)分大小寫; var pattern2 = /.at/gi; //匹配所有“.at”,不區(qū)分大小寫;
另外,還可以使用RegExp 構(gòu)造函數(shù),它接收兩個參數(shù):一個是要匹配的字符串模式,另一個是可選的標(biāo)志字符串。如:
var pattern1 = new RegExp("[bc]at","i");
由于RegExp 構(gòu)造函數(shù)的模式參數(shù)是字符串,所以在某些情況下要對字符串進(jìn)行雙重轉(zhuǎn)義。所有元字符串都必須雙重轉(zhuǎn)義,如 通常被轉(zhuǎn)義為 ,而在正則表達(dá)式中就會變成 。如:
/[bc]at/ => [bc]at /.at/ => .at /name/age/ => name/age /d.d{1,2}/ => d.d{1,2} /whello123/ => whello123
正則表達(dá)式字面兩始終會共享同一個RegExp 實例,而使用構(gòu)造函數(shù)創(chuàng)建的每一個新RegExp 實例都是一個新實例。如:
var re = null,i; for (var i = 0; i < 10; i ++){ re = /cat/g; re.test("catastrophe"); } for (var i = 0; i < 10; i ++){ re = new RegExp("cat","g"); re.test("catastrophe"); }
對于第一個,由于會測試到字符串末尾,所以下次再調(diào)用test()就要從頭開始。而第二個循環(huán)使用RegExp 構(gòu)造函數(shù)在每次循環(huán)沖創(chuàng)建正則表達(dá)式。因為媒體迭代都會創(chuàng)建一個新的RegExp 實例,所以每次調(diào)用text()都會返回true。
RegExp 實例屬性global:布爾值,是否設(shè)置了g;
ignoreCase:布爾值,是否設(shè)置了i;
multiline:布爾值,是否設(shè)置了m;
lastIndex:整數(shù),開始搜索下一個匹配項的字符位置,從0 開始算起;
source:正則表達(dá)式的字符串表示,按照字面量形式返回;
如:
var pattern = new RegExp("[bc]at","i"); document.write(pattern.global); //false document.write(pattern.ignoreCase); //true document.write(pattern.multiline); //false document.write(pattern.lastIndex); //0 document.write(pattern.source); //[bc]at
注意最后一個,source 屬性保存的是規(guī)范形式的字符串,就是字面量形式所用的字符串。
RegExp 實例方法主要有兩個方法,一個是exec()方法,一個是test()方法。
exec()方法是專門為捕獲組而設(shè)計的。接收一個字符串參數(shù),然后返回包含第一個匹配項信息的數(shù)組;或者null;返回的數(shù)組還額外包含兩個屬性:index 和input。在數(shù)組中,第一項是與整個模式匹配的字符串,其他項是與模式中的不活組匹配的字符串。如:
var text = "mom and dad and baby"; var pattern = /mom( and dad( and baby)?)?/gi; var matches = pattern.exec(text); console.log(matches.index); console.log(matches.input); console.log(matches[0]); console.log(matches[1]); console.log(matches[2]); /* [Log] 0 (repetition.html, line 33) [Log] mom and dad and baby (repetition.html, line 34) [Log] mom and dad and baby (repetition.html, line 35) [Log] and dad and baby (repetition.html, line 36) [Log] and baby (repetition.html, line 37) */
因為整個字符串本身與模式匹配,所以返回的數(shù)組matches 的index 為0;數(shù)組中的第一項是匹配的整個字符串,第二項包含與第一個不活租匹配的內(nèi)容,第三項包含與第二個捕獲組匹配的內(nèi)容。
第一個例子,這是一個全局模式:
var text = "this is a Global setting not a global function"; var pattern = /global/gi; var matches = pattern.exec(text); console.log(matches); //["Global"] console.log(matches.index); //10 console.log(matches.input); //this is a Global setting not a global function console.log(matches[1]); //undefined 這里沒有捕獲組 console.log(matches[0]); //Global console.log(pattern.lastIndex); //16 matches = pattern.exec(text); console.log(matches); //["global"]再次調(diào)用該exec()則繼續(xù)查找新的匹配項 console.log(matches.index); //31 console.log(pattern.lastIndex); //37
第二個例子,這不是一個全局模式:
var text = "this is a Global setting not a global function"; var pattern = /global/i; var matches = pattern.exec(text); console.log(matches); //["Global"] console.log(matches.index); //10 console.log(pattern.lastIndex); //0 matches = pattern.exec(text); console.log(matches); //["Global"] 這里仍然是Global,說明非全局模式會從頭開始搜索。 console.log(matches.index); //10 console.log(pattern.lastIndex); //0
全局模式,每次調(diào)用exec()都會返回字符串中的下一個匹配項;而非全局模式,每次調(diào)用exec()返回的都是第一個匹配項。
test()方法則是接收一個字符串參數(shù)。在模式與該參數(shù)匹配的情況下返回true;否則返回false。通常在只想知道目標(biāo)字符串與某個模式是否匹配,但不需要知道文本內(nèi)容的情況下,使用這個方法非常方便。
var text = "testing!"; var pattern = /est/gi; if (pattern.test(text)){ document.write("matched") }else{ document.write("not matched") }RegExp 構(gòu)造函數(shù)屬性
這些屬性有一個長屬性名也有一個短屬性名。最常用的有兩個:
leftContext($` input 字符串中l(wèi)astMatch 之前的文本);
rightContext ($" input 字符串中l(wèi)astMatch 之后的文本);
其他幾個屬性O(shè)pera 和IE 對此兼容不好。有:
input ($_ 最近一次要匹配的字符串);
lastMatch ($& 最近的一次匹配項);
lastParen ($+ 最近一次的捕獲組);
multiline ($* 返回布爾值,表示是否所有表達(dá)式都使用多行模式);
如:
var text = "hello there"; var pattern = / /gi; if(pattern.exec(text)){ document.write("targeted" + "
"); document.write(RegExp.leftContext); document.write(RegExp.rightContext); }else{ document.write("missed" + "
"); }
又如:
var text = "hello there"; var pattern = / /gi; if(pattern.exec(text)){ document.write("targeted" + "
"); document.write(RegExp.input); //hello there document.write(RegExp.multiline); //false }else{ document.write("missed" + "
"); }
因為短屬性名不是有效的標(biāo)識符,因此必須通過方括號語法來訪問它們。如RegExp["$""]
另外,還有9 個用于存儲捕獲組的構(gòu)造函數(shù)屬性。語法是RegExp.$1`RegExp.$2`等等。如:
var text = "this has been a short summer"; var pattern = /(..)or(.)/g; if (pattern.test(text)){ document.write(RegExp.$1); document.write(RegExp.$2); }模式的缺陷
具體訪問模式的局限
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86208.html
摘要:正則表達(dá)式一個描述字符模式的對象正則表達(dá)式的定義構(gòu)造函數(shù)正則表達(dá)式直接量一對斜杠新特性正則的擴(kuò)展引用類型類型的注意要點用于模式匹配的方法不支持全局搜索忽略表達(dá)式參數(shù)中的修飾符兩個參數(shù)第一個是正則表達(dá)式,第二個是要替換的字符串接收一個正則表達(dá) 正則表達(dá)式(regular expression):一個描述字符模式的對象 1 正則表達(dá)式的定義 RegExp()構(gòu)造函數(shù) 正則表達(dá)式直接量(一...
摘要:由于某些字符類非常常用,的正則表達(dá)式中,使用特殊轉(zhuǎn)義字符表示他們。多行搜索代碼示例對象創(chuàng)建對象可以通過引用類型創(chuàng)建正則表達(dá)式對象參數(shù)參數(shù)被稱為模式,可以使任何簡單或復(fù)雜的正則表達(dá)式,包含字符類限定符分組向前查找以及反向引用等。 概述 正則表達(dá)式是什么 正則表達(dá)式(RegularExpression):由一些普通字符和特殊字符組成的,用以描述一種特定的字符規(guī)則的表達(dá)式。正則表達(dá)式常用在一...
摘要:被稱之為修飾符,用于表明正則表達(dá)式的行為。創(chuàng)建對象如下代碼類型于類型之間的區(qū)別使用運算符,類型返回,類型返回。提取字符串中的兩個指定的索引號之間的字符。在字符串中查找匹配的子串,并替換于正則表達(dá)式匹配的字串。 RegExp類型 概述 正則表達(dá)式時什么 正則表達(dá)式(Regular Expression):由一些普通字符和特殊字符組成的,用以描述一種特定的字符規(guī)則的表達(dá)式。正則表達(dá)式常用于...
摘要:變量作用域垃圾收集內(nèi)存問題基本類型和引用類型中的變量包含基本類型值和引用類型值基本類型值指的是簡單的數(shù)據(jù)段引用類型值值那些可能有多個值構(gòu)成的對象五種基本數(shù)據(jù)類型的值即基本類型值是按值訪問的因此操作的是保存在變量中實際的值引用類型值是保存在內(nèi) 變量, 作用域, 垃圾收集(內(nèi)存問題) 基本類型和引用類型 ES中的變量包含基本類型值和引用類型值 基本類型值指的是簡單的數(shù)據(jù)段 引用類型值值那些...
摘要:如很明顯可以看到,實際上是函數(shù)的局部變量。簡單的說就是,復(fù)制給參數(shù),在函數(shù)內(nèi)部是局部變量,無論怎么變化,都不影響的變化。 ECMAScript 變量可能包含兩種不同數(shù)據(jù)類型的值:基本類型值和引用類型值。 基本類型和引用類型的值 基本類型值(String,Number,Boolean,Null,Undefined)指的是簡單的數(shù)據(jù)段;引用類型值(保存在內(nèi)存中的對象)指的是那些可能由多個值...
閱讀 1549·2023-04-26 02:50
閱讀 3560·2023-04-26 00:28
閱讀 1943·2023-04-25 15:18
閱讀 3227·2021-11-24 10:31
閱讀 1005·2019-08-30 13:00
閱讀 1010·2019-08-29 15:19
閱讀 1781·2019-08-29 13:09
閱讀 2987·2019-08-29 13:06