正则表达式2-留下你的邮箱

匹配邮箱

在《正则表达式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。这样就可以解决部分匹配的问题了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS中使用正则表达式就不得不提NSRegularExpression,所以我们需要先搞清楚什么是NSRegula...
    sunmumu1222阅读 7,013评论 0 4
  • 几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    没技术的BUG开发攻城狮阅读 10,059评论 0 23
  • 推荐几个正则表达式编辑器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1阅读 14,007评论 9 151
  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 6,521评论 0 9
  • 今天上午看完了一本书,关于人际处事的,我想到了性格能辐射出一定的气场,使我们每个人找到相应的同类。一般隐藏太深及太...
    范樱阅读 1,391评论 1 0

友情链接更多精彩内容