您的位置:首页 > 其它

正则表达式2-邮箱的故事

2016-03-02 10:43 169 查看

匹配邮箱

在《正则表达式1-字符串匹配种》,我们知道如何去匹配名称了,现在来看看一个更复杂的例子,邮箱吧。


我们看一下这个邮箱的组成

405062429@qq.com


405062429是邮箱名称,qq.com是域名。

我们如何匹配呢?看看这个行不行

'405062429@qq.com'.match(/\w+@\w+.\w+/)

好像可以,但是‘405062429@qq+com‘也能被匹配,这是因为我们用到了'.'.


.在正则表达式中表示元字符(Metacharacter),是具有特殊含义的字符,表示查找单个字符,除了换行和行结束符。


在这里我们需要Escape the “.” with a backslash to match a literal period。使用.转译一下。

所以这样写吧:

'405062429@qq.com'.match(/\w+@\w+\.\w+/)

分组

我们邮箱的顶级域名(Top-level Domain)不一定是com怎么办。看看下面这样写可以吗?

/\w+@\w+\.com|net|org|edu/i

这样的话并不能把com和net,org,edu放在一起,而是把
\w+@\w+\.com
和后面的域名放在一起了,显然不对,这时候就要用到分组。像下面这样写:

/\w+@\w+\.(com|net|org|edu)/i

部分匹配

上面这样已经可以工作的很好了,可是还是有部分匹配的问题。比如
'405062429@qq.comXXX'.match(/\w+@\w+\.(com|net|org|edu)/i)
也会返回(我们希望精确匹配,这种情况应该返回null)。

如何解决这个问题呢:

/^\w+@\w+\.(com|net|org|edu)$/i


^表示在一行的开头就开始匹配,start matching at the beginning of the line

$表示在一行的结尾结束匹配,stop matching at the end of the line


说的明白点就是,比如
/^shen$/
,那么
shen
之前没有任何东西,之后也没有任何东西,那么就只能匹配
shen
。这样就可以解决部分匹配的问题了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: