本文實(shí)例講述了JS正則表達(dá)式常見用法。分享給大家供大家參考,具體如下:
前言:正則表達(dá)式(regular expression)反反復(fù)復(fù)學(xué)了多次,學(xué)了又忘,忘了又學(xué),這次打算把基本的東西都整理出來,加強(qiáng)記憶,也方便下次查詢。
學(xué)習(xí)正則表達(dá)式之前首先需要掌握記憶這些基本概念:
1.元字符:(.,/w,/W,/d,/D,/s,/S,^,$,)
| 字符 | 含義 | 
|---|---|
| . | 匹配除了換行符以外的任意字符。 | 
| /s | 代表任意空白符(換行符,制表符,空格) | 
| /S | 匹配任意非空字符串 | 
| /b | 匹配單詞邊界,匹配單詞的開頭和結(jié)尾。 | 
| /B | 匹配一個(gè)非單詞邊界 | 
| /d | 匹配一個(gè)數(shù)字,等價(jià)于[0-9] | 
| /D | 匹配一個(gè)數(shù)字,等價(jià)于[^0-9] | 
| /w | 匹配一個(gè)單字字符(字母、數(shù)字或者下劃線)等價(jià)于[A-Za-z0-9_],例如, //w/ 匹配 "apple," 中的 'a',"$5.28,"中的 '5' 和 "3D." 中的 '3'。 /W匹配一個(gè)非單字字符。等價(jià)于[^A-Za-z0-9_],例如, //W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%." 中的 '%'。 | 
| /W | 匹配一個(gè)非單字字符。等價(jià)于[^A-Za-z0-9_],例如, //W/ 或者 /[^A-Za-z0-9_]/ 匹配 "50%." 中的 '%'。 | 
| ^ | 匹配字符串的開始用在[]括號(hào)里面表示排除,/^A/ 并不會(huì)匹配 "an A" 中的 'A',但是會(huì)匹配 "An E" 中的 'A'。 | 
| $ | 匹配字符串的結(jié)束。例如,/t$/ 并不會(huì)匹配 "eater" 中的 't',但是會(huì)匹配 "eat" 中的 't'。 QQ號(hào)必須為5位到12位數(shù)字時(shí),可以使用:^/d{5,12}$ | 
2.分組符([],(),{});
| 字符 | 含義 | 
|---|---|
| () | 如果想要重復(fù)多個(gè)字符該怎么辦?你可以用小括號(hào)來指定子表達(dá)式(也叫做分組),然后你就可以指定這個(gè)子表達(dá)式的重復(fù)次數(shù)了。eg: (/d{1,3}/.){3}/d{1,3}是一個(gè)簡(jiǎn)單的IP地址匹配表達(dá)式。要理解這個(gè)表達(dá)式,請(qǐng)按下列順序分析它:/d{1,3}匹配1到3位的數(shù)字,(/d{1,3}/.){3}匹配三位數(shù)字加上一個(gè)英文句號(hào)(這個(gè)整體也就是這個(gè)分組)重復(fù)3次,最后再加上一個(gè)一到三位的數(shù)字(/d{1,3})。 | 
| [] | 代表一個(gè)字符集合。匹配方括號(hào)的中任意字符,包括轉(zhuǎn)義序列。你可以使用破折號(hào)(-)來指定一個(gè)字符范圍。對(duì)于點(diǎn)(.)和星號(hào)(*)這樣的特殊符號(hào)在一個(gè)字符集中沒有特殊的意義。他們不必進(jìn)行轉(zhuǎn)義,不過轉(zhuǎn)義也是起作用的。例如,[abcd] 和[a-d]是一樣的。他們都匹配"brisket"中得‘b',也都匹配“city”中的‘c'。/[a-z.]+/ 和/[/w.]+/都匹配“test.i.ng”中得所有字符。 | 
| {} | 表示量詞的范圍的。 | 
3.修飾符(i,g,m);
| 字符 | 含義 | 
|---|---|
| i | 忽略大小寫 | 
| g | 執(zhí)行全局匹配 | 
| m | 執(zhí)行多行匹配 | 
4.量詞(*,?,+,-,{n,m},?=n,?!=n);
| 字符 | 含義 | 
|---|---|
| * | 匹配任意次,.*連在一起就意味著任意數(shù)量的不包含換行的字符。等價(jià)于{0,} | 
| + | 匹配前面一個(gè)表達(dá)式1次或者多次。等價(jià)于 {1,}。 | 
| ? | 匹配前面一個(gè)表達(dá)式0次或者1次。等價(jià)于 {0,1}。 | 
| {n,m} | 匹配n到m次 | 
| x(?=y) | 匹配'x'僅僅當(dāng)'x'后面跟著'y'.這種叫做正向肯定查找。 例如,/Jack(?=Sprat)/會(huì)匹配到'Jack'僅僅當(dāng)它后面跟著'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack'僅僅當(dāng)它后面跟著'Sprat'或者是‘Frost'。但是‘Sprat'和‘Frost'都不是匹配結(jié)果的一部分。 | 
| x(?!y) | 匹配'x'僅僅當(dāng)'x'后面不跟著'y',這個(gè)叫做正向否定查找。 例如,//d+(?!/.)/匹配一個(gè)數(shù)字僅僅當(dāng)這個(gè)數(shù)字后面沒有跟小數(shù)點(diǎn)的時(shí)候。正則表達(dá)式//d+(?!/.)/.exec("3.141")匹配‘141'但是不是‘3.141' | 
實(shí)例解析:
var reg = //(?0/d{2}[) -]?/d{8}/	“(”和“)”也是元字符,后面的分組節(jié)里會(huì)提到,所以在這里需要使用轉(zhuǎn)義。
	這個(gè)表達(dá)式可以匹配幾種格式的電話號(hào)碼,像(010)88886666,或022-22334455,或02912345678等。我們對(duì)它進(jìn)行一些分析吧:首先是一個(gè)轉(zhuǎn)義字符/(,它能出現(xiàn)0次或1次(?),然后是一個(gè)0,后面跟著2個(gè)數(shù)字(/d{2}),然后是)或-或空格中的一個(gè),它出現(xiàn)1次或不出現(xiàn)(?),最后是8個(gè)數(shù)字(/d{8})。
以下通過實(shí)例來講解RegExp:
需求一:在一句話英文中匹配一個(gè)hi的單詞。
var str = 'Hi RegExp I love you so much Hi Hi hi';var reg = new RegExp("//bhi//b","gi");//g是一個(gè)修飾符,表示全局匹配。/b是一個(gè)元字符,代表單詞邊界,匹配單詞的開頭和結(jié)尾。//直接量語法:reg2 = //bhi/b/gi;console.log(str.match(reg2));//['hi','hi','hi','hi']//升級(jí)//匹配hi后面不遠(yuǎn)處跟著一個(gè)lucyvar strlc = //bhi/b.*/blucy/b/;var luch = 'hi welcome to beijing lucy!!!';console.log(luch.match(strlc));需求二:在一句話英文中匹配一個(gè)hi的單詞。
var reg = /0/d/d/d-/d/d/d/d/d/d/d/d/;///d代表一個(gè)數(shù)字,等價(jià)于[0-9],/D匹配一個(gè)非數(shù)字字符,等價(jià)于[^0-9]var tel = "0123-887523146";console.log(tel.match(reg));//0123-88752314;//這個(gè)連續(xù)寫多次的方法很笨哎,所以引進(jìn)了變量。regTel = /0/d{3}-/d{8}/;console.log(tel.match(regTel));//0123-88752314;需求三:寫一個(gè)清除字符串前后空格的正則表達(dá)式。
String.prototype.trim = function(){return this.replace(/(^/s*)|(/s*$)/g, "");}var str2 = " hi space "//這里前后共有兩個(gè)空格console.log(str2.length);//14console.log(str2.trim().length);//8console.log(str2.trim());//hi space需求四:匹配一個(gè)郵箱。
var eReg = //S*@/S*/./S*/;console.log(eReg.test('873619879@qq.com'))//true
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答