匹配郵箱
在《正則表達(dá)式1-字符串匹配種》,我們知道如何去匹配名稱了,現(xiàn)在來(lái)看看一個(gè)更復(fù)雜的例子,郵箱吧。
我們看一下這個(gè)郵箱的組成
405062429@qq.com
405062429是郵箱名稱,qq.com是域名。
點(diǎn)
我們?nèi)绾纹ヅ淠??看看這個(gè)行不行
'405062429@qq.com'.match(/\w+@\w+.\w+/)
好像可以,但是‘405062429@qq+com‘也能被匹配,這是因?yàn)槲覀冇玫搅?.'.
.在正則表達(dá)式中表示元字符(Metacharacter),是具有特殊含義的字符,表示查找單個(gè)字符,除了換行和行結(jié)束符。
在這里我們需要Escape the “.” with a backslash to match a literal period。使用.轉(zhuǎn)譯一下。
所以這樣寫吧:
'405062429@qq.com'.match(/\w+@\w+\.\w+/)
分組
我們郵箱的頂級(jí)域名(Top-level Domain)不一定是com怎么辦??纯聪旅孢@樣寫可以嗎?
/\w+@\w+\.com|net|org|edu/i
這樣的話并不能把com和net,org,edu放在一起,而是把\w+@\w+\.com和后面的域名放在一起了,顯然不對(duì),這時(shí)候就要用到分組。像下面這樣寫:
/\w+@\w+\.(com|net|org|edu)/i
部分匹配
上面這樣已經(jīng)可以工作的很好了,可是還是有部分匹配的問(wèn)題。比如'405062429@qq.comXXX'.match(/\w+@\w+\.(com|net|org|edu)/i)也會(huì)返回(我們希望精確匹配,這種情況應(yīng)該返回null)。
如何解決這個(gè)問(wèn)題呢:
/^\w+@\w+\.(com|net|org|edu)$/i
^表示在一行的開(kāi)頭就開(kāi)始匹配,start matching at the beginning of the line
$表示在一行的結(jié)尾結(jié)束匹配,stop matching at the end of the line
說(shuō)的明白點(diǎn)就是,比如/^shen$/,那么shen之前沒(méi)有任何東西,之后也沒(méi)有任何東西,那么就只能匹配shen。這樣就可以解決部分匹配的問(wèn)題了。