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