前言:一般开发中都会接触到正则表达式,作为一名合格的前端,也应该了解一下正则表达式编写原则,便于自己也能快速编写想要的正则表达式。
1、作用
正则表达式是一种字符串匹配的模式
数据验证:比如电话号码、邮箱等
替换文本:快速找到特定文本,用于替换
快速提取字符串:基于匹配原则,快速从文档中查找或提取子字符串
2、语法
包含正则的普通字符+特殊字符
普通字符
[abc] 匹配[...]的所有字符
[^abc] 取反,除了[...]的其他字符
[A-Z] 区间字母A到Z
. 匹配除(\n换行符 \r 回车符)的任何单个字符
\s 匹配所有,\s所有空白符,包括换行
\S 匹配所有,非空白符,不包括换行
\w 匹配字母、数字、下划线
特殊字符
$ 结尾位置 (匹配$字符----\$)
^ 开始位置(匹配$字符----\^)
() 子表达式开始和结束(匹配字符----\( 和 \))
* 匹配零次或多次(匹配字符----\*)
+ 匹配一次或多次(匹配字符----\+)
? 匹配零次或一次(匹配字符----\?)
| 两项间的一个(匹配字符----\|)
限定符
{n} n为非负整数,匹配n次
{n,} n为非负整数,至少n次
{n,m} n为非负整数,n<=m,最少n次,最多m次
修饰符
i 不区分大小写
g 全局匹配
m 多行匹配
s 特殊字符远点包含换行符
3、常用场景
常用的正则表达式
16进制颜色
/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
以#开始 ,6或3个字符(a-f、A-F、0-9)结尾
电话号码
/^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/
以1开头
3可跟任一数字:3\d
4可跟5-9:4[5-9]
5可跟0-3或5-9:5[0-35-9]
6后2567其中一个:6[2567]
7后是0-8:7[0-8]
8后任一数字:8\d
9后是0-3或3-5:9[0-35-9])
其余8位是任意数字(\d{8})
则
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
身份证号
/^[1-9]\d{5}(19|20|21)\d{2}(0[1-9]|10|11|12)(0[1-9]|[1-2]\d|30|31)\d{3}[\dX]$/
第一位在0-9区间:[1-9]
后面是5位任意数字:\d{5
4位年份(19、20、21开头,后两位任意):(19|20|21)
两位代表月份(0开头的1-9或者是10、11、12):\d{2}(0[1-9]|10|11|12)
两位日期(01-31):(0[1-9]|[1-2]\d|30|31)
三位顺序码:\d{3}
最后一位是校验码,可数字可X:[\dX]$/
网址
https://
:----?):)?
/----\/
([^?:/]+)(:(\d+))?(\/[^?]*)?(\?(.*))?
/^((https?):)?\/\/([^?:/]+)(:(\d+))?(\/[^?]*)?(\?(.*))?/
邮箱
^[A-Za-z0-9-_\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$ 名称有汉字([\ue00-\u9fa5])、字母([a-zA-z])、数字、下划线、中划线,域名有数字、字母、下划线、中划线
4、使用方法
字符串.match(正则):返回符合的字符串,若不满足返回null
字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1
字符串.replace(正则,新的字符串):找到符合正则的内容并替换
正则.test(字符串):在字符串中查找符合正则的内容,满足则返回true,反之为false