直接告诉你这些常用正则表达式是怎么写出来的

作为一名程序员,不会写正则表达式总感觉少了点什么,不要求你能把正则玩出花来,但最起码要对常用的正则表达式手到擒来,刚毕业的我对于正则也是一头雾水,不过学会它也就一篇教程的事情

本文我不会再浪费带宽把正则的规则再次重复一遍,而是从实际入手,直接告诉你为什么这么写

16进制颜色

按照规则来

  1. # 开头
  2. 后面紧跟着6个字符或者3个字符作为结尾,这些字符可以是 a-f 的小写字母、A-F的大写字母、数字

第一句,可以写成 /^#/;第二句,[a-fA-F0-9] 表示任意的 a-fA-F0-963的个数可以用 {6}{3}进行表示,那么6个字符就是 [a-fA-F0-9]{6},6个字符就是 [a-fA-F0-9]{3},这两个都有可能,用一个或(|)符号来连接:([a-fA-F0-9]{6}|[a-fA-F0-9]{3}),最后结尾可以用个 $

所有合到一起就是 /^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/

链接

目标是匹配出协议、域名、端口号portpathsearch

  1. 协议
    合法的协议有 httphttps,还有一个是自适应协议,即不明确加协议,跟当前页面的协议保持一致,所以以下都是合法的: http://toutiao.comhttps://toutiao.com//toutiao.com
    这三个协议组成的链接共同点是肯定有 // 字符串,在 //的前面可能是 https: 也可能是 http: 也可以没有任何字符串
    先按照 https:// 这种写规则:^https:\/\/,其中的 s 字符可能有也可能没有,所以使用 ? 修饰:^https?:\/\/,又因为 https?:可能没有,所以这个字符串也用 ?修饰:^(https?:)?\/\/

  2. 域名
    域名的前面可能是 //,从 //往后面匹配,只要没有代表 :port、代表 search?、代表 path/,那么就都属于域名:[^?:/]+

  3. 端口号 port
    端口号肯定以 : 开头,后面跟着的只要是数字就都属于 port:\d+,由于不一定有端口号,所以用 ? 修饰:(:\d+)?

  4. path
    肯定以 / 开头,只要不遇到代表 search?,那么就都属于 path\/[^?]*,由于可能没有 path,所以用 ? 修饰:(\/[^?]*)?

  5. search
    肯定以 ? 开头,后面所有的字符都属于 search(不考虑 hash 路由):\?(.*),由于可能没有 search,所以用 ? 修饰:(\?.*)?

最后把上面所有规则合起来就是提取链接的完整正则了,考虑到需要精确提取所需要的部分,所以会对所需要提取的部分加上小括号,结果为:/^((https?):)?\/\/([^?:/]+)(:(\d+))?(\/[^?]*)?(\?(.*))?/

邮箱

以前在知乎上看到过一段邮箱正则,号称是最符合标准的正则表达式,那条正则的体积好像有几十KB吧,总之很长,现在找不到了,这里只关注常用的邮箱格式,规则:名称允许汉字、字母、数字,下划线,中划线,域名可以有数字、字母、下划线、中划线组成

汉字的范围是 [\u4e00-\u9fa5],字母的范围是 [a-zA-Z],数字的范围是 [0-9],合起来组成邮箱的名称 ^[A-Za-z0-9-_\u4e00-\u9fa5]+

域名是 [a-zA-Z0-9_-]+,域名后缀可以是多级域名 (\.[a-zA-Z0-9_-]+)+

上面组合起来就是 ^[A-Za-z0-9-_\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$

手机号

手机号的号段可能是会增加的,所以在实际场景中不建议限制得太死了

本正则按照以下规则编写:

  1. 11位数字,以数字 1 开头,即 ^1
  2. 接下来的数字如果是
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值