简介
正则表达式(Regular Expression
,用来对单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式。
搜索模式可用于文本搜索和文本替换。
使用
在javascript
中,创建正则表达式的对象有以下两种方式:
- 字面量的形式
- 使用 RegExp 对象
字面量的形式
1 |
|
RegExp对象
1 |
|
使用方法
test()
regexp.test( stringObject )
test()
方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true
,否则返回 false
。
1 |
|
match()
stringObject.match( regexp )
match()
方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
1 |
|
replace()
stringObject.replace( regexp, replacement )
replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
1 |
|
exec()
RegExpObject.exec(string)
exec() 方法用于检索字符串中的正则表达式的匹配。
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
1 |
|
正则表达式元字符
特殊含义的元字符
特殊元字符 | 代表含义 |
---|---|
\d | 0-9之间的任意一个数字 \d只占一个位置 |
\w | 数字,字母 ,下划线 0-9 a-z A-Z _ |
\s | 空格或者空白等 |
\D | 除了\d |
\W | 除了\w |
\S | 除了\s |
. | 除了\n之外的任意一个字符 |
\ | 转义字符 |
| | 或者 |
() | 分组 |
\n | 匹配换行符 |
\b | 匹配边界 字符串的开头和结尾 空格的两边都是边界 => 不占用字符串位数 |
^ | 限定开始位置 => 本身不占位置 |
$ | 限定结束位置 => 本身不占位置 |
[a-z] | 任意字母 []中的表示任意一个都可以 |
[^a-z] | 非字母 []中^代表除了 |
[abc] | abc三个字母中的任何一个 [^abc]除了这三个字母中的任何一个字符 |
量词元字符
特殊元字符 | 代表含义 |
---|---|
* | 0到多个 |
+ | 1到多个 |
? | 0次或1次 可有可无 |
{n} | 正好n次 |
{n,} | n到多次 |
{n,m} | n次到m次 |
惰性量词
支配量词
略
贪婪量词在匹配字符串的时候首先看是否匹配字符串,如果没有找到匹配的则去掉字符串中最后一个字符再次尝试,整个过程一直重复,直到字符串为空时停止。
而惰性量词正好相反,首先查看字符串中第一个字符是否匹配,否则在读入下一个字符在进行匹配,直至重复这个过程到读入整个字符窜都不匹配时停止。
常用的正则表达式
- 用户名校验
4-16位用户名
1 |
|
- 密码强度
密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
1 |
|
- 数字正则
数字正则分为三种情况:
- 正数正则
1 |
|
- 负数正则
1 |
|
- 小数正则
1 |
|
1 |
|
- 手机号码正则
中国地区的手机号码由11位组成。截至2020年10月,手机号码前两位由13-19组成。
目前三大运营商的手机号段分布如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | ||||||||||
1 | ||||||||||
2 | ||||||||||
3 | 联通 | 联通 | 联通 | 电信 | 移动 | 移动 | 移动 | 移动 | 移动 | 移动 |
4 | 联通 | 电信 | 移动 | 联通 | 移动 | 移动 | ||||
5 | 移动 | 移动 | 移动 | 电信 | 联通 | 联通 | 移动 | 移动 | 移动 | |
6 | 联通 | |||||||||
7 | 虚 | 虚 | 移动 | 电信 | 电信卫 | 联通 | 联通 | 电信 | 移动 | 电信物 |
8 | 电信 | 电信 | 移动 | 移动 | 移动 | 联通 | 联通 | 移动 | 移动 | 电信 |
9 | 电信 | 电信 | 广电 | 电信 | 移动 | 联通 | 移动 | 移动 | 电信 |
携号转网后,号码运营商仅供参考
移动卫星电话号段 1349
电信天通卫星电话 1740
1 |
|
- 身份证正则
身份证号码由18位数字或17位数字+字母组成。
(1)前1、2位数字表示:所在省份的代码;
(2)第3、4位数字表示:所在城市的代码;
(3)第5、6位数字表示:所在区县的代码;
(4)第7~14位数字表示:出生年、月、日;
(5)第15、16位数字表示:所在地的派出所的代码;
(6)第17位数字表示性别:奇数表示男性,偶数表示女性;
(7)第18位数字是校检码:也有的说是个人信息码,一般是随计算机的随机产生。
1 |
|
对于身份证的校验位,可以使用特定的算法进行计算。通用编码校验小结
- URL正则
URL由以下几部分组成:协议,服务器主机地址,端口,路径和参数。
1 |
|
- IPv4地址正则
1 |
|
- 十六进制颜色正则
1 |
|
- QQ号码正则
1 |
|
- 车牌号正则
1 |
|
- 包含中文正则
1 |
|
正则表达式进阶
子表达式
捕获
方向引用
【参考文章】