正则表达式 RegExp
则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。(推荐一个可视化正则网站)
语法
// 方法一:构造函数创建
var patt = new RegExp(pattern, modifiers)
// 方法二:字面量创建
var patt2 = /pattern/modifiers
- pattern(模式) 描述了表达式的模式
- modifiers(修饰符) 可选,用于指定全局匹配、区分大小写的匹配和多行匹配。
注意事项:
当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。比如,以下是等价的:
var re = new RegExp("\\w+");
var re = /\w+/;
基础知识
修饰符
修饰符用于执行区分大小写和全局匹配:
修饰符 | 描述 |
---|---|
g | 全局匹配,即找到所有匹配结果,而不是找到第一个匹配结果 |
i | 忽略大小写 |
m | 多行匹配,即匹配时会识别换行符 |
方括号
方括号用于查找某个范围内的字符:
表达式 | 描述 |
---|---|
[abc] | 匹配 a、b、c 中的任意一个 |
[^abc] | 匹配除了 a、b、c 以外的任意字符 |
[0-9] | 匹配0 到 9之间的任意一个数字 |
[a-z] | 匹配 a 到 z 之间的任意一个小写字母 |
[A-Z] | 匹配 A 到 Z 之间的任意一个大写字母 |
[a-zA-Z] | 匹配 a 到 z 以及 A 到 Z 之间的任意一个字母 |
元字符
元字符(Metacharacter)是拥有特殊含义的字符:
元字符 | 描述 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母、数字和下划线 |
\W | 匹配非字符、数字和下划线 |
\d | 匹配数字 |
\D | 匹配非数字字符 |
\s | 匹配空白字符,包括空格、制表符、换页符等 |
\S | 匹配非空白字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
\0 | 匹配 null 字符 |
\n | 匹配换行符 |
\r | 匹配回车符 |
\t | 匹配制表符 |
\f | 匹配换页符 |
\v | 匹配垂直制表符 |
量词
量词用于指定重复的字符:
量词 | 描述 |
---|---|
* | 重复0次或无限次 |
+ | 重复1次或无限次 |
? | 重复0次或1次 |
{n} | 重复n次 |
{n,} | 重复n次或无限次 |
{n,m} | 重复n到m次 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
捕获组
捕获组分为:
- 普通捕获组 (使用方便)
- 命名捕获组 (使用清晰)
普通捕获组
从正则表达式左侧开始,每出现一个左括号(
记做一个分组,分组编号从 1 开始。0 代表整个表达式。
对于时间字符串:2017-04-25,表达式如下
/(\d{4})-((\d{2})-(\d{2}))/
有 4 个左括号,所以有 4 个分组:
编号 | 捕获组 | 匹配 |
---|---|---|
0 | (\d{4})-((\d{2})-(\d{2})) | 2017-04-25 |
1 | (\d{4}) | 2017 |
2 | ((\d{2})-(\d{2})) | 04-25 |
3 | (\d{2}) | 04 |
4 | (\d{2}) | 25 |
命名捕获组
每个以左括号开始的捕获组,都紧跟着 ?,而后才是正则表达式。
对于时间字符串:2017-04-25,表达式如下:
/(?<year>\d{4})-(?<md>(?<month>\d{2})-(?<date>\d{2}))/
编号 | 名称 | 捕获组 | 匹配 |
---|---|---|---|
0 | 0 | (?\d{4})-(?(?\d{2})-(?\d{2})) | 2017-04-25 |
1 | year | (?\d{4}) | 2017 |
2 | md | (?(?\d{2})-(?\d{2})) | 04-25 |
3 | month | (?\d{2}) | 04 |
4 | date | (?\d{2}) | 25 |