正則表達(dá)式
是一個(gè)描述字符模式的對(duì)象。
JavaScript中的正則表達(dá)式用RegExp對(duì)象表示舟奠。
正則表達(dá)式的定義
正則表達(dá)式的創(chuàng)建:
- 可以使用RegExp()構(gòu)造函數(shù)來(lái)創(chuàng)建RegExp對(duì)象.
- 也可以通過(guò)一種特殊的直接量語(yǔ)法來(lái)創(chuàng)建。
var pattern = /s$/ == var pattern = new RegExp("s$");
//運(yùn)行這段代碼創(chuàng)建一個(gè)新的RegExp對(duì)象沼瘫,并將它賦值給變量pattern,這個(gè)特殊的RegExp對(duì)象用來(lái)匹配所有以字母“s”結(jié)尾的字符串湿故。
正則表達(dá)式的模式規(guī)則是由一個(gè)字符序列組成的膜蛔。包括所有字母和數(shù)字在內(nèi)坛猪,大多數(shù)的字符都是按照直接量?jī)H描述待匹配的字符的皂股。
1. 直接量字符
正則表達(dá)式中的所有字母和字符都是按照字面含義進(jìn)行匹配的。
通行規(guī)則:
- 如果想在正則表達(dá)式中使用這些字符的直接量進(jìn)行匹配躁锁,則必須使用前綴\卵史。
- 對(duì)于想按照直接量進(jìn)行匹配的字母和數(shù)字盡量不要用反斜線對(duì)其轉(zhuǎn)義战转。
- 要想在正則表達(dá)式中按照直接量匹配反斜線本身以躯,則必須使用反斜線對(duì)其轉(zhuǎn)義。"/\\/".
2. 字符類
將直接量字符單獨(dú)放進(jìn)方括號(hào)內(nèi)就組成了字符類忧设。
3. 重復(fù)
正則表達(dá)式的重復(fù)字符語(yǔ)法(盡可能多的匹配)
V吩巍!谨垃!對(duì)于"?"刘陶、"*",由于字符內(nèi)可能匹配0個(gè)字符匙隔,因此他們?cè)试S什么都不匹配。
4. 非貪婪的重復(fù)
非貪婪重復(fù)是匹配盡可能少的捍掺,語(yǔ)法為在待匹配字符后加“?”,如 ??乡小、+?饵史。
5. 選擇满钟、分組和引用
- 字符"|"用于分隔供選擇的字符
選擇項(xiàng)的嘗試匹配次序是從左到右胳喷,直到發(fā)現(xiàn)了匹配項(xiàng)。
eg: /ab|cd|ef/可以匹配字符串"ab"吭露、"cd"、"ef"泥兰。 - 圓括號(hào)有三種作用:
- 把單獨(dú)的項(xiàng)組合成子表達(dá)式弄屡。
- 在完整的模式中定義子模式鞋诗。
- 允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。
- 正則表達(dá)式不允許用雙引號(hào)括起的內(nèi)容中有單引號(hào)削彬。
- 在正則表達(dá)式中不用創(chuàng)建帶數(shù)字編碼的引用,也可以對(duì)子表達(dá)式進(jìn)行分組壶笼,以 ("?:" 和 ")"分組。
6.指定匹配位置
正則表達(dá)式中的錨字符:
^ 匹配字符串的開(kāi)頭覆劈,在多行檢索中沛励,匹配一行的開(kāi)頭
$ 匹配字符串的結(jié)尾
\b 匹配一個(gè)單詞的邊界
\B 匹配非單詞的邊界
(?=p) 零寬正向先行斷言,要求接下來(lái)的字符都與p匹配侯勉,但不能包括匹配P的那些字符
(?|p) 零寬負(fù)向先行斷言,要求接下來(lái)的字符不與P匹配址貌。
7. 修飾符
- 修飾符放在"/"符號(hào)之外。
- 修飾符"i"用以說(shuō)明模式匹配是不區(qū)分大小的练对。
- 修飾符"g"說(shuō)明模式匹配應(yīng)該是全局的。
- 修飾符"m"在多行模式中執(zhí)行匹配螟凭,^匹配一行的開(kāi)頭和字符串的開(kāi)頭虚青,$匹配行的結(jié)束和字符串的結(jié)束螺男。
用于模式匹配的String方法
- search()
參數(shù)為一個(gè)正則表達(dá)式,返回第一個(gè)與之匹配的子串的起始位置(不支持全局檢索)下隧。 - replace()
其中第一個(gè)參數(shù)是一個(gè)正則表達(dá)式,第二個(gè)參數(shù)是要進(jìn)行替換的字符串何乎。 - match()
唯一參數(shù)就是一個(gè)正則表達(dá)式,返回的是一個(gè)由匹配結(jié)果組成的數(shù)組支救。 - exec()
返回一個(gè)數(shù)組,帶有index和input屬性各墨。
RegExp對(duì)象
RegExp()構(gòu)造函數(shù)帶有兩個(gè)字符串參數(shù),其中第二個(gè)參數(shù)是可選的欲主,第一個(gè)參數(shù)包含正則表達(dá)式的主題部分逝嚎。
var zipcode = new RegExp("\d{5}","g");
RegExp屬性
- source屬性
是一個(gè)只讀字符串,包含正則表達(dá)式的文本补君。 - global屬性
是一個(gè)只讀的布爾值,用以說(shuō)明這個(gè)正則表達(dá)式是否帶有修飾符g伟桅。 - ignoreCase屬性
也是一個(gè)只讀的布爾值,用以說(shuō)明這個(gè)正則表達(dá)式是否帶有修飾符i楣铁。 - multiline也是一個(gè)只讀的布爾值更扁,用以說(shuō)明這個(gè)正則表達(dá)式是否帶有修飾符m。
- lastIndex是一個(gè)可讀/寫(xiě)的整數(shù)浓镜,如果匹配模式帶有g(shù)修飾符,這個(gè)屬性存儲(chǔ)在整個(gè)字符串下膛薛,一次檢索的開(kāi)始位置。
RegExp方法
- exec()方法
對(duì)一個(gè)指定的字符串執(zhí)行一個(gè)正則表達(dá)式哄啄。
即在一個(gè)字符串的執(zhí)行匹配檢索,如果沒(méi)有找到任何匹配就返回null椿访,但如果找到了一個(gè)匹配,它將返回一個(gè)數(shù)組成玫。 - test()方法
它的參數(shù)是一個(gè)字符串。
用test()對(duì)某個(gè)字符串進(jìn)行檢索哭当,如果包含正則表達(dá)式的一個(gè)匹配結(jié)果則返回true。
var pattern = /java/i;
pattern.test("javascript"); //返回true