应用中正则表达式的使用
无论我们学习哪一门语言 我们都会遇到正则表达式的场景 他的使用确实解决了很多实际应用的很多问题 作为一名开发者这应该是每个人都应掌握的技能
简介
正则表达式对我们来说肯定不陌生了 无论你学习哪门语言 肯定会有所用到它 从js里的表单验证匹配到路由的匹配以及很多后台的
形式匹配验证 对于开发人员来讲都是很重要的一门技术 尽管平时一直在用 但发现这个却很值得整理一番 毕竟他的所存在的应用场景太多了
当然这里会推荐一个正则表达式的在线工具RegExr 一个好的工具对于学习往往可以起到事半功倍的效果
过程中也会结合MDN的正则表达式手册所罗列的内容加以说明
认识正则表达式
很多时候我们会去处理一些类似手机号 邮箱的验证 当然一开始我们需要知道的就是字符串的替换
举例来说的话就是如果我们需要打印hello world
在我们输入hello $text$
时 我们希望匹配到结果是hello world
所以我们的匹配规则也就是对$text$
的匹配
我们要知道$
符号是匹配字符串的一个结尾 所以对于这样的符号要进行转义 即我们的匹配规则也就是
/\$text\$/g
当然这里的 replace
的也就是world
这个单词
这里符号的转义就是在符号之前加上 \
在匹配规则中对大小写是敏感的 所以如果我们想忽略大小写的限制 那么我们可以在后面加上加上一个 i
标识
所以这个时候我们的匹配规则是 /\$text\$/ig
这里的
i
也就是ignore
而g这个标识就是global
也就是全局性的匹配 就是说对全文都进行字符串的替换
量词的说明
这个在RegExr
的Reference
的Quantifiers & Alternation
里面已经列举了 其实主要我们常用的就是
^
匹配输入的开始。如果多行标志被设置为true
,那么也匹配换行符后紧跟的位置$
匹配输入的结束。如果多行标示被设置为true
,那么也匹配换行符前的位置*
匹配前一个表达式0次或多次。等价于 {0,}+
匹配前面一个表达式1次或者多次。等价于 {1,}?
匹配前面一个表达式0次或者1次。等价于 {0,1}.
(小数点)匹配除换行符之外的任何单个字符。
如果我想匹配指定范围次数时 可以使用
{m,n}
在这之间加上想要的范围值 这样一来我们也就可以限定character
的长度
这些在匹配元素如空格时就会用到 这些都是限定在他之前的元素的出现次数
元素分类
通常我们所需要面对的就是数字 单词以及一些特殊字符 在这里RegExr
在Character classes
列出了一些元素
我们可以先列举几个
\d
匹配数字 等价于[0-9]\D
匹配匹配一个非数字字符 等价于[^0-9]。\w
匹配是一个word
即单词\s
匹配空格\t
匹配一个水平制表符
手机号匹配
对于手机号的匹配的应用其实很多 这时我们可以对用户输入的手机号进行正则匹配
手机号的第一位数字都是 1 所以当然一开始的规则也就是/1/ig
对于手机号码的第2个数字 因为服务商的不同也会有所不同 那么总结下来主要有34578
那么新的匹配规则就是/1[34578]/ig
也就是第二个数是34578
里的其中一个
当然我们的手机位数都是11位 已经确定了2位 那么接下来还有9个 这9个也都是数字
所以可以新建规则为 (指明剩下的都是数字且为9位 )
/1[34578][0-9]{9}/ig
这里的[0-9]的匹配也可以使用之前所提出的元素也就是
\d
也是代表了数字
这样也就可以匹配最基础的手机号码匹配 当然还有其他的规则 完全可以按照从左到有的匹配规则进行匹配
用户名匹配
想象一个场景就是在论坛社区里常常会**@某一个人 那么@**某个人这个字段会加上一个连接 这样就可以查看对方的个人主页
那个这个时候我们需要解决的就是匹配@Jelly
这样的语句 所以我们可以定义规则如下`
/@(\w{1,})/
这里的意思就是**@**开头 后面是一个word character
而\w
包含了数字字母和下划线 这个也就是一个应户名 同时我们回去匹配 1 个或 1个以上
而替换的文字当然就是a
标签了: <a href="/$1">@$1</a>
特别的作为一个整体进行匹配时 在两边加上
()
用来表明这匹配的一个整体[]
代表的是或的关系即满足一个即可
邮件匹配
用户在注册登录时大都会用到邮件地址 当然用户也有可能输入一个无效的邮箱信息 那么我们就可以用正则表达式去匹配我们所需要的邮件地址 而去除那些没有用的邮件地址
其实邮件验证的匹配要求会比较严格 所以说实现一个完整的邮件匹配并不容易 但多数场景下借助正则表达式我们就可以满足我们的需求
首先来匹配到我们常用的邮箱地址 在知道我们邮箱地址的基本形式之后 我们可以去匹配一个基本的邮箱
因为我们邮箱肯定会有一个@符号 那么在@符号之前会有几个单词或者数字所以一开始我们定义规则为:
/[\w]+@/g
邮箱当然也会有类似二级域名的形式 如jelly.gavin@sina.com
如果再匹配-
符号 所以在\w
匹配时需要匹配到这样的形式
我们之前罗列过小数点可以匹配到除换行符的任何单个字符 那个这里我们需要匹配的是小数点 So
接下来的规则定义就是
/[\w\.-]+@/g
接下来如果一个邮箱地址如 gehuachun@outlook.com
那么**@**符号后面也是一个单词加一个点
/[\w]+@[\w\.-]+/g
再者的话就是邮箱地址的后缀 现在邮箱地址的后缀已经有很多种了并不是只有com
所以你认为只是几个字符的话我们就可以使用\w
/[\w]+@[\w\.-]+\.[\w]+/g
这样就基本完成了对邮箱的匹配 当然如果需要限定格式的话比如我们只需要匹配Outlook
和QQ
邮箱 我们只需要提供两个选择就可以
/[\w]+@(qq|outlook)\.[\w]+/
因为之前已经说过()
作为一个整体部分进行判断匹配 而|
则标识或的关系 那么我们就可以成功匹配到我们需要的类型邮箱