JavaScript中的正則表達(dá)式簡明總結(jié)
一、定義正則表達(dá)式的方法
定義正則表達(dá)式的方法有兩種:構(gòu)造函數(shù)定義和正則表達(dá)式直接量定義。例如:
var reg2 = /\d{5, 12}/; // 通過直接量定義
正則表達(dá)式直接量字符
\o:NUL字符(\u0000)
\t:制表符(\u0009)
\n:換行符(\u000A)
\v:垂直制表符(\u000B)
\f:換頁符(\u000C)
\r:回車符(\u000D)
\xnn:由十六進(jìn)制數(shù)nn指定的拉丁字符,例如,\x0A等價(jià)于\n
\uxxxx:由十六進(jìn)制數(shù)xxxx指定的Unicode字符,例如\u0009等價(jià)于\t
\cX:控制字符^X,例如,\cJ等價(jià)于換行符\n
正則表達(dá)式錨字符
^:匹配字符串的開頭,在多行檢索中,匹配一行的開頭
$:匹配字符串的結(jié)尾,在多行檢索中,匹配一行的結(jié)尾
\b:匹配一個(gè)單詞的邊界,簡言之,就是位于字符\w和\W之間的位置,或位于字符\w和字符串的開頭或者結(jié)尾之間的位置([\b]匹配的是退格符)
\B:匹配非單詞邊界的位置
(?=p):零寬正向先行斷言,要求接下來的字符都與p匹配,但不能包括匹配p的那些字符
(?!p):零寬負(fù)向先行斷言,要求接下來的字符串不與p匹配
正則表達(dá)式的字符類
[...]:方括號(hào)內(nèi)的任意字符
[^...]:不在方括號(hào)內(nèi)的任意字符
.:除換行符和其他Unicode行終止符之外的任意字符
\w:任何ASCII字符組成的單詞,等價(jià)于[a-zA-Z0-9]
\W:任何不是ASCII字符組成的單詞,等價(jià)于[^a-zA-Z0-9]
\s:任何Unicode空白符
\S:任何非Unicode空白符的字符,注意\w和\S不同
\d:任何ASCII數(shù)字,等價(jià)于[0-9]
\D:除了ASCII數(shù)字之外的任何字符,等價(jià)于[^0-9]
[\b]:退格直接量(特例)
正則表達(dá)式的重復(fù)字符語法
{n, m}:匹配前一項(xiàng)至少n次,但不能超過m次
{n, }:匹配前一項(xiàng)n次或者更多次
{n}:匹配前一項(xiàng)n次
?:匹配前一項(xiàng)0次或者1次,也就是說前一項(xiàng)是可選的,等價(jià)于{0, 1}
+:匹配前一項(xiàng)1次或多次,等價(jià)于{1, }
*:匹配前一項(xiàng)0次或多次,等價(jià)于{0, }
正則表達(dá)式的選擇、分組和引用字符
|:選擇,匹配的是該符號(hào)左邊的子表達(dá)式或右邊的子表達(dá)式
(…):組合,將幾個(gè)項(xiàng)組合為一個(gè)單元,這個(gè)單元可通過“*”、“+”、“?”和“|”等符號(hào)加以修飾,而且可以記住和這個(gè)組相匹配的字符串以供此后的任何使用
(?: …):只組合,把項(xiàng)組合到一個(gè)單元,但是不記憶與改組相匹配的字符
\n:和第n個(gè)分組第一次匹配的字符相匹配,組是圓括號(hào)中的子表達(dá)式(也有可能是嵌套的),組索引是從左到右的左括號(hào)數(shù),“(?:”形式的分組不編碼
正則表達(dá)式修飾符
i:執(zhí)行不區(qū)分大小寫的匹配
g:執(zhí)行一個(gè)全局匹配,簡言之,即找到所有的匹配,而不是在找到第一個(gè)之后就停止
m:多行匹配模式,^匹配一行的開頭和字符串的開頭,$匹配行的結(jié)尾和字符串的結(jié)尾
用于模式匹配的String方法
search():它的參數(shù)是一個(gè)正則表達(dá)式,返回第一個(gè)與之匹配的子串的起始位置,如果沒有匹配的子串就返回-1。如果search()的參數(shù)不是正則表達(dá)式,則首先會(huì)通過RegExp構(gòu)造函數(shù)將它轉(zhuǎn)換為正則表達(dá)式,search()不支持全局檢索,因?yàn)樗雎孕揎椃鹓。如:
var s = "JavaScript".search(/script/i); // s = 4
replace():它用來執(zhí)行檢索與替換。接收兩個(gè)參數(shù),第一個(gè)是正則表達(dá)式,第二個(gè)是要進(jìn)行替換的字符串。正則表達(dá)式如果設(shè)置的修飾符g,則進(jìn)行全局替換,否則只替換匹配的第一個(gè)子串。如果第一個(gè)參數(shù)不是正則表達(dá)式,則直接搜索該字符串,而不是將其轉(zhuǎn)換為正則表達(dá)式。如:
match():它的參數(shù)是一個(gè)正則表達(dá)式,如果不是則通過RegExp轉(zhuǎn)換,返回的是一個(gè)由匹配結(jié)果組成的數(shù)組。如果設(shè)置了修飾符g則進(jìn)行全局匹配。如:
split():這個(gè)方法用以將調(diào)用它的字符串拆分為一個(gè)子串組成的數(shù)組,使用的分隔符是split()的參數(shù),它的參數(shù)也可以使一個(gè)正則表達(dá)式。如:
var d = '21 , 123, 44, 64, 67, 3'.split(/\s*,\s*/); // d = ["21", "123", "44", "64", "67", "3"]
二、RegExp對象
每個(gè)RegExp對象都有5個(gè)屬性。屬性source是一個(gè)只讀字符串,包含正則表達(dá)式的文本。屬性global是一個(gè)只讀布爾值,用以說明這個(gè)正則表達(dá)式是否帶有修飾符g。屬性ignoreCase是一個(gè)只讀布爾值,用以說明這個(gè)正則表達(dá)式是否帶有修飾符i。屬性multiline是一個(gè)只讀布爾值,用以說明這個(gè)正則表達(dá)式是否帶有修飾符m。屬性lastIndex是一個(gè)可讀可寫的整數(shù),如果匹配模式帶有g(shù)修飾符,這個(gè)屬性存儲(chǔ)整個(gè)字符串中下一次檢索的開始位置。
RegExp對象有兩個(gè)方法。exec()的參數(shù)是一個(gè)字符串,它的功能與match()相似,exec()方法對一個(gè)指定的字符串執(zhí)行一個(gè)正則表達(dá)式,也就是在一個(gè)字符串中執(zhí)行匹配檢索。如果沒有找到任何匹配就返回null,找到了匹配就返回一個(gè)數(shù)組,這個(gè)數(shù)組的第一個(gè)元素包含的是與正則表達(dá)式相匹配的字符串,余下的元素是與圓括號(hào)內(nèi)的子表達(dá)式相匹配的子串,不論正則表達(dá)式是否有修飾符g,都會(huì)返回一樣的數(shù)組。當(dāng)調(diào)用exec()的正則表達(dá)式對象具有修飾符g時(shí),它將把當(dāng)前正則表達(dá)式對象的lastIndex屬性設(shè)置為緊挨著匹配子串的字符位置。當(dāng)同一個(gè)正則表達(dá)式第二次調(diào)用exec()時(shí),它將從lastIndex屬性所指示的字符串處開始檢索,如果exec()沒有發(fā)現(xiàn)任何匹配結(jié)果,它會(huì)將lastIndex重置為0。如:
var text = "JavaScript is more fun than Java!"
var r;
while((r = p.exec(text)) != null) {
console.log(r, 'lastIndex: ' + p.lastIndex);
}
另外一個(gè)方法是test(),它的參數(shù)是一個(gè)字符串,用test()對某個(gè)字符串進(jìn)行檢查,如果包含正則表達(dá)式的一個(gè)匹配結(jié)果,則返回true否則返回false。如:
p.test('javascript'); // true
- javascript使用正則表達(dá)式檢測IP地址
- javascript學(xué)習(xí)筆記(八)正則表達(dá)式
- javascript正則表達(dá)式參數(shù)/g與/i及/gi的使用指南
- PHP和javascript常用正則表達(dá)式及用法實(shí)例
- JavaScript利用正則表達(dá)式去除日期中的“-”
- 刪除javascript中注釋語句的正則表達(dá)式
- JavaScript利用正則表達(dá)式去除日期中的-
- javascript常用的正則表達(dá)式實(shí)例
- 如何實(shí)現(xiàn)正則表達(dá)式的JavaScript的代碼高亮
- javascript正則表達(dá)式之search()用法實(shí)例
相關(guān)文章
簡單介紹JavaScript中字符串創(chuàng)建的基本方法
這篇文章主要介紹了簡單介紹JavaScript中字符串創(chuàng)建的基本方法,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-07-07
淺談JavaScript中的Math.atan()方法的使用
這篇文章主要介紹了JavaScript中的Math.atan()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06
script標(biāo)簽屬性用type還是language
本文介紹了javascript腳本中標(biāo)簽屬性type與language的區(qū)別分析,有需要的小伙伴可以參考下2015-01-01
詳解JavaScript中setSeconds()方法的使用
這篇文章主要介紹了詳解JavaScript中setSeconds()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06
Js從頭學(xué)起(基本數(shù)據(jù)類型和引用類型的參數(shù)傳遞詳細(xì)分析)
Js中所有函數(shù)的參數(shù)傳遞都是按值傳遞的,也就是把函數(shù)外面的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個(gè)變量復(fù)制到另一個(gè)變量一樣。下面舉幾個(gè)特別的例子2012-02-02

