JS中的正则表达式及常用场景示例
本文最后更新于:2021年11月20日 晚上
前言
在写代码过程中,经常会遇到需要正则表达式验证字符的情况,以前常常去网上搜索一个复制下来就用了,但是总是不知道那连在一起的几个乱七八糟的字符是什么意思。于是想着还是认真去学一遍吧,毕竟学到自己脑子里的才算是自己的知识,所以花了几天时间将正则表达式相关的知识重新学习梳理了一遍。
定义
正则表达式(Regular Expression)是一个描述字符模式的对象,JavaScript中的正则表达式用RegExp
对象表示,可以使用RegExp()构造函数来创建RegExp对象,但更多时候是用直接量语法来创建。
1 |
|
这里介绍一个在线解析正则的网站,可以将正则表达式图形化:http://www.regexper.com(由于是国外网站,会出现访问慢或者打不开的情况,可以去 GitLab 下载源码安装在自己的电脑上使用)
1 |
|
语法
JavaScript 正则表达式中的所有字母和数字都是按照字面含义进行匹配的,比如 /javascript/ 可以匹配所有包含 javascript 的字符串,此外还支持非字母的字符匹配,这些字符需要通过反斜杠\进行转义,构成转义字符/\//
:
1 |
|
元字符-位置类
字符 | 含义 | 英文 |
---|---|---|
^ | 匹配字符串的开头 | |
$ | 匹配字符串的结尾 | |
\b | 匹配一个单词的边界,就是位于字符\w和\W之间的位置,或位于\w与字符串开头或结尾的位置 | boundary |
\B | 匹配非单词边界的位置 | boundary |
1 |
|
修饰符
修饰符用于执行区分大小写和全局匹配:
字符 | 含义 | 英文 |
---|---|---|
i | 执行对大小写不敏感的匹配。 | ignore case |
g | 执行全局匹配(不止匹配第一个) | global |
m | 执行多行匹配。 | multiple lines |
1 |
|
元字符-转义类
字符 | 含义 | 英文 |
---|---|---|
\o | NULL字符 | ignore case |
\t | 制表符 | tabulator |
\n | 换行符 | newline |
\v | 垂直制表符 | verticality |
\f | 换页符 | form feed |
\r | 回车符 | return |
\xnn | 十六进制数nn指定的字符 | |
\uxxxx | 十六进制数xxxx指定的Unicode字符 | Unicode |
\cX | 控制字符^X | Control |
\ | 反斜杠\ |
1 |
|
元字符-字符类
字符 | 含义 | 英文 |
---|---|---|
[…] | 方括号内的任意字符 | |
[^…] | 不在方括号内的任意字符 | |
. | 除换行符及其他Unicode行终止符之外的任意字符,等价 [^\n\r] | |
\w | 任何ASCII字符组成的单词,等价于[a-zA-Z0-9] | words |
\W | 任何非ASCII字符组成的单词,等价于[^a-zA-Z0-9] | words |
\s | 任何Unicode空白符 | space |
\S | 任何非Unicode空白符的字符 | space |
\d | 任何ASCII数字,等价于[0-9] | digits |
\D | 除ASCII数字之外的任意字符,等价于[^0-9] | digits |
[\b] | 退格符(特例) | backspace |
1 |
|
元字符-重复类
字符 | 含义 |
---|---|
{n,m} | 匹配前一项至少n次,但不能超过m次 |
{n,} | 匹配前一项至少n次 |
{n} | 匹配前一项n次 |
? | 匹配前一项0次或1次,等价于{0,1},最多出现一次 |
+ | 匹配前一项1次或多次,等价于{1,},至少出现一次 |
* | 匹配前一项0次或多次,等价于{0,} |
1 |
|
元字符-操作类
字符 | 含义 |
---|---|
| | 选择,匹配该字符左边或右边的表达式 |
(…) | 组合,将几个项组成一个单元 |
(?:…) | 只组合,不可引用 |
1 |
|
RegExp 对象方法
方法 | 描述 |
---|---|
exec | 检索字符串中指定的值。返回找到的值,并确定其位置。 |
test | 检索字符串中指定的值,返回 true 或 false。 |
toString | 返回正则表达式的字符串。 |
1 |
|
String 对象方法
方法 | 描述 |
---|---|
search | 检索与正则表达式相匹配的值。 |
match | 找到一个或多个正则表达式的匹配。 |
replace | 替换与正则表达式匹配的子串。 |
split | 把字符串分割为字符串数组。 |
1 |
|
RegExp 对象属性
属性 | 描述 |
---|---|
constructor | 返回一个函数,该函数是一个创建 RegExp 对象的原型。 |
global | 判断是否设置了 “g” 修饰符 |
ignoreCase | 判断是否设置了 “i” 修饰符 |
lastIndex | 用于规定下次匹配的起始位置 |
multiline | 判断是否设置了 “m” 修饰符 |
source | 返回正则表达式的匹配模式 |
常用场景
检测用户名
非中文用户名
规则如下
- 最短4位,最长16位 {4,16}
- 可以包含小写大母 [a-z] 和大写字母 [A-Z]
- 可以包含数字 [0-9]
- 可以包含下划线 [ _ ] 和减号 [ - ]
- 首字母只能是大小写字母
1 |
|
图解:
中文用户名
1 |
|
图解:
检测密码强度
密码规则:最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
1 |
|
图解:
检测日期
1 |
|
图解:
检测邮箱地址
1 |
|
图解:
检测手机号码
1 |
|
图解:
检测身份证号码
1 |
|
图解:
检测车牌号
1 |
|
图解:
检测URL地址
1 |
|
图解:
检测ip地址
ipv4地址
1 |
|
图解:
IPv6地址
1 |
|
由于图解太过复杂,想了解的同学可以去这个网站上http://www.regexper.com 进行解析查看。
结语
感谢你看到这里,文章可能还有不足和需要改正的地方,欢迎在评论区留下你的建议。如果觉得本篇文章对你有点帮助的话,可以点赞或者分享给你的朋友。