正則表達(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á)式中的錨字符:
字符 | 含義 |
---|---|
^ | 匹配字符串的開頭度宦,在多行檢索中踢匣,匹配一行的開頭 |
$ | 匹配字符串的結(jié)尾,在多行檢索中戈抄,匹配一行的結(jié)尾 |
\b | 匹配一個(gè)單詞的邊界离唬,簡(jiǎn)言之,就是位于字符\w和\W之間的位置划鸽,或位于字符\w和字符串的開頭或者結(jié)尾之間的位置(但需要注意输莺,[\b]匹配的是退格符) |
\B | 匹配非單詞邊界的位置 |
(?=p) | 零寬正向先行斷言,要求接下來的字符都與p匹配裸诽,但不能包括匹配p的那些字符 |
(?!p) | 零寬負(fù)向先行斷言嫂用,要求接下來的字符不與p匹配 |
正則表達(dá)式修飾符:
字符 | 含義 |
---|---|
i | 執(zhí)行不區(qū)分大小寫的匹配 |
g | 執(zhí)行一個(gè)全局匹配,簡(jiǎn)言之丈冬,即找到所有的匹配嘱函,而不是在找到第一個(gè)之后就停止 |
m | 多行匹配模式,^匹配一行的開頭和字符串的開頭埂蕊,$匹配行的結(jié)束和字符串的結(jié)束 |
String.search()
String支持4種使用正則表達(dá)式的方法往弓。最簡(jiǎn)單的是search()。它的參數(shù)是一個(gè)正則表達(dá)式蓄氧,返回第一個(gè)與之匹配的子串的起始位置函似,如果找不到匹配的子串,它將返回-1喉童。比如撇寞,下面的調(diào)用返回值為4:
"JavaScript".search(/script/i);
如果search()的參數(shù)不是正則表達(dá)式,則首先會(huì)通過RegExp構(gòu)造函數(shù)將它轉(zhuǎn)換成正則表達(dá)式堂氯,search()方法不支持全局檢索重抖,因?yàn)樗雎哉齽t表達(dá)式參數(shù)中的修飾符g。
String.replace()
replace()方法用以執(zhí)行檢索與替換操作祖灰。其中第一個(gè)參數(shù)是一個(gè)正則表達(dá)式钟沛,第二個(gè)參數(shù)是要進(jìn)行替換的字符串。這個(gè)方法會(huì)對(duì)調(diào)用它的字符串進(jìn)行檢索局扶,使用指定的模式來匹配恨统。如果正則表達(dá)式中設(shè)置了修飾符g叁扫,那么源字符串中所有與模式匹配的子串都將替換成第二個(gè)參數(shù)指定的字符串;如果不帶修飾符g畜埋,則只替換所匹配的第一個(gè)子串莫绣。如果replace()的第一個(gè)參數(shù)是字符串而不是正則表達(dá)式,則replace()將直接搜索這個(gè)字符串悠鞍,而不是像search()一樣首先通過RegExp()將它轉(zhuǎn)換為正則表達(dá)式对室。
//將所有不區(qū)分大小寫的javascript都替換成大小寫正確的JavaScript
text.replace(/javascript/gi,"JavaScript");
但replace()的功能遠(yuǎn)不止這些】Ъ溃回憶一下前文所提到的掩宜,正則表達(dá)式中使用圓括號(hào)括起來的子表達(dá)式是帶有從左到右的索引編號(hào)的,而且正則表達(dá)式會(huì)記憶與每個(gè)子表達(dá)式匹配的文本么翰。如果在替換字符串中出現(xiàn)了$加數(shù)字颓屑,那么replace()將用與指定的子表達(dá)式相匹配的文本來替換這兩個(gè)字符孽尽。
//一段引用文本起始于引號(hào)谷遂,結(jié)束于引號(hào)
//中間的內(nèi)容區(qū)域不能包含引號(hào)
var quote=/"([^"]*)"/g;
//用中文半角引號(hào)替換英文引號(hào)专普,同時(shí)要保持引號(hào)之間的內(nèi)容(存儲(chǔ)在$1中)沒有被修改
text.replace(quote,'“$1”');
replace()方法的第二個(gè)參數(shù)可以是函數(shù),該函數(shù)能夠動(dòng)態(tài)地計(jì)算替換字符串码耐。
String.match()
match()方法是最常用的String正則表達(dá)式方法追迟。它的唯一參數(shù)就是一個(gè)正則表達(dá)式(或通過RegExp()構(gòu)造函數(shù)將其轉(zhuǎn)換為正則表達(dá)式),返回的是一個(gè)由匹配結(jié)果組成的數(shù)組骚腥。如果該正則表達(dá)式設(shè)置了修飾符g敦间,則該方法返回的數(shù)組包含字符串中的所有匹配結(jié)果。例如:
"1 plus 2 equals 3".match(/\d+/g); //返回["1","2","3"]
如果這個(gè)正則表達(dá)式?jīng)]有設(shè)置修飾符g桦沉,match()就不會(huì)進(jìn)行全局檢索每瞒,它只檢索第一個(gè)匹配。但即使match()執(zhí)行的不是全局檢索纯露,它也返回一個(gè)數(shù)組剿骨。在這種情況下,數(shù)組的第一個(gè)元素就是匹配的字符串埠褪,余下的元素則是正則表達(dá)式中用圓括號(hào)括起來的子表達(dá)式浓利。因此,如果match()返回一個(gè)數(shù)組a钞速,那么a[0]存放的是完整的匹配贷掖,a[1]存放的則是與第一個(gè)用圓括號(hào)括起來的表達(dá)式相匹配的子串,以此類推渴语。為了和方法replace()保持一致苹威,a[n]存放的是$n的內(nèi)容。
var url = /(\w+):\/\/([\w.]+)\/(\S*)/;
var text = "Visit my blog at http://www.example.com/~david";
var result = text.match(url);
if (result != null) {
var fullurl = result[0]; //包含"http://www.example.com/~david"
var protocol = result[1]; //包含"http"
var host = result[2]; //包含"www.example.com"
var path = result[3]; //包含"~david"
}
String.split()
String對(duì)象的最后一個(gè)和正則表達(dá)式相關(guān)的方法是split()驾凶。這個(gè)方法用以將調(diào)用它的字符串拆分為一個(gè)子串組成的數(shù)組牙甫,使用的分隔符是split()的參數(shù)掷酗,例如:
"123,456,789".split(","); //返回["123","456","789"]
split()方法的參數(shù)也可以是一個(gè)正則表達(dá)式,這使得split()方法異常強(qiáng)大窟哺。例如泻轰,可以指定分隔符,允許兩邊可以留有任意多的空白符:
"1,2,3,4,5".split(/\s*,\s*/); //返回["1","2","3","4","5"]