JavaScript中正则
正则的功能
- 匹配符合指定正则的字符串内容
- 捕获匹配的字符串内容实现一些需求
正则的定义方式
JavaScrip中正则的定义方式一般就两种,一种是字面量定义,一种是创建正则对象实例定义
- 字面量定义
- 创建实例定义
// 字面量定义:意思就是通过一个简单的变量引用正则
var reg1 = /\d+/g;
// 创建实例定义
var reg2 = new RegEXp("\\d+")
/*两种方式的主要区别在于
前一种方式对于正则中的特殊字符不需要转义,
而后一种方式需要多加一个/进行转义。
*/
正则中的特殊字符
- 元字符
元字符有分为普通元字符和量词元字符
常用的元字符都列在下面了
\ | 转义字符(把元字符转义成在字符串中的实际含义) |
---|---|
^ | 表示以某一个字符开始 |
$ | 表示以某一个字符结尾 |
\n | 匹配一个换行符 |
. | 匹配出换行符以外的任意字符 |
* | 表示某个字符出现0或n次 |
+ | 表示某个字符出现1或n次 |
? | 表示某个字符出现0或1次 |
{n} | 表示某个字符出现n次 |
{n, } | 表示至少出现n次 |
{n,m} | 表示出现n-m次 |
x|y | x或y其中一个字符 |
[xyz] | x或y或z其中一个字符 |
[^xyz] | 除了xyz的任意一个字符 |
[a-z] | a-z至间的任意字符 |
[^a-z] | 除了a-z之间的字符的任意字符 |
\d | 一个0-9至间的任意一个字符 |
\D | 与\d相反 |
\b | 匹配一个边界符 |
\w | 数字、字母、下划线中的任意字符 |
\s | 匹配一个空白符(空格,制表符、换页符) |
- 修饰符
g、i、m
g:global 全局匹配
i:ignoreCase 忽略大小写匹配
m:mutiline 多行匹配
正则中的捕获
正则捕获具有两种性质,一个就是懒惰性,另一个就是贪婪性
- 捕获的懒惰性
JavaScript中的正则捕获通常用exec(str)方法捕获符合要求的字符串,而这种方法每次执行只捕获符合要求的一个 - 捕获的贪婪性
JavaScript中的正则捕获通常用exec(str)方法捕获符合要求的字符子串都是每次捕获中最优最长的那个
// 懒惰性
var reg = /\d+/;
var str = "zhangsan2020lisi2016";
var res = reg.exec(str); // 只捕获了2020
res = reg.exec(srr) ; // 第二次捕获仍然还是2020
// 消除懒惰性的办法就在正则后面加一个g
var reg1 = /\d+/g;
var ret = reg.exec(str) ; // 2020
ret = reg.exec(str); // 2016
// 贪婪性
/*
var reg = /\d+/g; 这个正则的意思就是0-9中的数字出现至少一次,
按道理来说在捕获的过程中应该是将所有符合要求的结果都捕获到,但是正则捕获的过程中只会捕获符合的数字最长的结果,比如zhangsan2021lis 本来应该捕获 2 ,0,2,1,20,02,21,202,021,2021等结果,但是最后只会捕获2021这个结果。
*/