什么是正則表達(dá)式? 在編寫處理字符串的程序或網(wǎng)頁(yè)時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī)則的字符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的工具。換句話說(shuō),正則表達(dá)式就是記錄文本規(guī)則的代碼? ? ?
1.正則表達(dá)式的定義
RegExp() 對(duì)象 創(chuàng)建 第一種方法: var reg= new RegExp('\d+'); 第二種方法 var reg=/\d+/;
2.正則表達(dá)式的exec方法簡(jiǎn)介
語(yǔ)法:
reg.exec(str); 其中str為要執(zhí)行正則表達(dá)式的目標(biāo)字符串。
例如:
var reg = /test/;
var str = 'testString';
var result = reg.exec(str);
alert(result);
結(jié)果:將會(huì)輸出test,因?yàn)檎齽t表達(dá)式reg會(huì)匹配str(‘testString’)中的’test’子字 符串,并且將其返回。
1.正則表達(dá)式中的直接量字符
在正則表達(dá)式中所有的字母字符和數(shù)字都是按照字面意思與自身相匹配的.JavaScript的正則表達(dá)式還通過(guò)以反斜杠()開(kāi)頭的轉(zhuǎn)義序列支持某些非字母字符.例如,序列 "\n" 在字符串中匹配的是一個(gè)直接量換行符.在正則表達(dá)式中,許多標(biāo)點(diǎn)符號(hào)都有特殊的含義.
\f? ? 換頁(yè)符
\n? 換行符
\r? ? 回車
\t? ? 制表符
\v? ? 垂直制表符
\o? ? nul字符
2.正則表達(dá)式中的字符類
將單獨(dú)的直接符放進(jìn)中括號(hào)內(nèi)就可以組合成字符類.一個(gè)字符類和它所包含的任何一個(gè)字符都匹配,所以正則表達(dá)式 / [abc] / 和字母 "a" , "b" , "c" 中的任何一個(gè)都匹配.另外還可以定義否定字符類,這些類匹配的是除那些包含在中括號(hào)之內(nèi)的字符外的所有字符.定義否定字符尖時(shí),要將一個(gè) ^ 符號(hào)作為從左中括號(hào)算起的第一個(gè)字符.正則表達(dá)式的集合是 / [a-zA-z0-9] / .
[...] 位于括號(hào)之內(nèi)的任意字符 [^...] 不在括號(hào)之中的任意字符 . 除了換行符之外的任意字符,等價(jià)于[^\n] \w 任何單字字符, 等價(jià)于[a-zA-Z0-9] \W 任何非單字字符,等價(jià)于[^a-zA-Z0-9] \s 任何空白符,等價(jià)于[\ t \ n \ r \ f \ v] \S 任何非空白符,等價(jià)于[^\ t \ n \ r \ f \ v] \d 任何數(shù)字,等價(jià)于[0-9] \D 除了數(shù)字之外的任何字符,等價(jià)于[^0-9] 3.正則表達(dá)式中的重復(fù)
在剛剛學(xué)過(guò)的正則語(yǔ)法中,可以把兩位數(shù)描述成 / \ d \ d /,把四位數(shù)描述成 / \d \ d \ d \ d /.但我們還沒(méi)有一種方法可以用來(lái)描述具有任意多數(shù)位的數(shù)字或者是一個(gè)字符串.這個(gè)串由三個(gè)字符以及跟隨在字母之后的一位數(shù)字構(gòu)成.這些復(fù)雜的模式使用的正則表達(dá)式語(yǔ)法指定了該表達(dá)式中每個(gè)元素要重復(fù)出現(xiàn)的次數(shù).
{n, m} 匹配前一項(xiàng)至少n次,但是不能超過(guò)m次
{n, }? ? 匹配前一項(xiàng)n次,或者多次
{n}? ? ? 匹配前一項(xiàng)恰好n次
?? ? ? ? 匹配前一項(xiàng)0次或1次,也就是說(shuō)前一項(xiàng)是可選的. 等價(jià)于 {0, 1}
匹配前一項(xiàng)1次或多次,等價(jià)于{1,}
匹配前一項(xiàng)0次或多次.等價(jià)于{0,}
4.正則表達(dá)式中的選擇,分組和引用
| 選擇.匹配的要么是該符號(hào)左邊的子表達(dá)式,要么它右邊的子表達(dá)式 (...) 分組.將幾個(gè)項(xiàng)目分為一個(gè)單元.這個(gè)單元可由 *、+、?和|等符號(hào)使用,而 且還可以記住和這個(gè)組匹配的字符以供此后引用使用 \n 和第n個(gè)分組所匹配的字符相匹配.分組是括號(hào)中的子表達(dá)式(可能是嵌套的 ).分組號(hào)是從左到右計(jì)數(shù)的左括號(hào)數(shù)
5.指定匹配的位置
^ 匹配的是字符的開(kāi)頭,在多行檢索中,匹配的是一行的開(kāi)頭 $ 匹配的是字符的結(jié)尾,在多行檢索中,匹配的是一行的結(jié)尾 \b 匹配的是一個(gè)詞語(yǔ)的邊界.簡(jiǎn)而言之就是位于字符\w 和 \w之間的位置(注 意 :[\b]匹配的是退格符) \B 匹配的是非詞語(yǔ)的邊界的字符
6.正則表達(dá)式中的屬性
i 執(zhí)行大小寫不敏感的匹配 g 執(zhí)行一個(gè)全局的匹配,簡(jiǎn)而言之,就是找到所有的匹配,而不是在找到第一個(gè)之后就停止了
不區(qū)分大小寫修飾符I 形式:
/pattern/I
var reg = /b/;
var str = 'BBS';
console.info(reg.exec(str));返回null,因?yàn)榇笮懖环稀?/p>
var reg = /b/i;
var str = 'BBS';
console.info(reg.exec(str));
匹配到B,這個(gè)就是i修飾符的作用了。
常用的正則
"^\\d+$" //非負(fù)整數(shù)(正整數(shù) + 0)
"^[0-9]*[1-9][0-9]*$" //正整數(shù)
"^((-\\d+)|(0+))$" //非正整數(shù)(負(fù)整數(shù) + 0)
"^-[0-9]*[1-9][0-9]*$" //負(fù)整數(shù)
"^-?\\d+$" //整數(shù)
"^\\d+(\\.\\d+)?$" //非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮點(diǎn)數(shù)
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$" //非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //負(fù)浮點(diǎn)數(shù)
"^(-?\\d+)(\\.\\d+)?$" //浮點(diǎn)數(shù)
"^[A-Za-z]+$" //由26個(gè)英文字母組成的字符串
"^[A-Z]+$" //由26個(gè)英文字母的大寫組成的字符串
"^[a-z]+$" //由26個(gè)英文字母的小寫組成的字符串
"^[A-Za-z0-9]+$" //由數(shù)字和26個(gè)英文字母組成的字符串
"^\\w+$" //由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$" //email地址
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$" //url