1. 正则表达式基础
1.1 创建正则表达式
-
字面量形式:
const regex = /pattern/flags;
-
pattern
:正则表达式的模式。 -
flags
:标志(可选),如g
(全局匹配)、i
(忽略大小写)、m
(多行匹配)。
-
-
构造函数形式:
const regex = new RegExp('pattern', 'flags');
-
pattern
:正则表达式的模式(字符串形式)。 -
flags
:标志(可选)。
-
1.2 正则表达式的组成部分
-
普通字符:如字母、数字、空格等。
-
元字符:具有特殊含义的字符,如
.
、*
、+
、?
等。 -
量词:指定匹配字符的数量,如
{n}
、{n,}
、{n,m}
。 -
字符类:匹配一组字符,如
[abc]
、[^abc]
。 -
分组和捕获:使用
()
进行分组和捕获。 -
断言:如
^
(开头)、$
(结尾)、\b
(单词边界)。
2. 基本元字符
元字符 | 描述 |
---|---|
. | 匹配除换行符(\n )以外的任意字符。 |
\d | 匹配数字字符(等价于 [0-9] )。 |
\D | 匹配非数字字符(等价于 [^0-9] )。 |
\w | 匹配字母、数字或下划线(等价于 [a-zA-Z0-9_] )。 |
\W | 匹配非字母、数字或下划线的字符(等价于 [^a-zA-Z0-9_] )。 |
\s | 匹配空白字符(包括空格、制表符、换行符等)。 |
\S | 匹配非空白字符。 |
^ | 匹配字符串的开头。 |
$ | 匹配字符串的结尾。 |
\b | 匹配单词边界。 |
\B | 匹配非单词边界。 |
3. 字符类
元字符 | 描述 |
---|---|
[] | 匹配括号内的任意一个字符(如 [abc] 匹配 "a"、"b" 或 "c")。 |
[^] | 匹配不在括号内的任意一个字符(如 [^abc] 匹配非 "a"、"b"、"c" 的字符)。 |
4. 量词
元字符 | 描述 |
---|---|
* | 匹配前面的字符 0 次或多次。 |
+ | 匹配前面的字符 1 次或多次。 |
? | 匹配前面的字符 0 次或 1 次。 |
{n} | 匹配前面的字符恰好 n 次。 |
{n,} | 匹配前面的字符至少 n 次。 |
{n,m} | 匹配前面的字符至少 n 次,至多 m 次。 |
*? | 非贪婪匹配,尽可能少地匹配。 |
+? | 非贪婪匹配,尽可能少地匹配。 |
?? | 非贪婪匹配,尽可能少地匹配。 |
5. 分组和捕获
元字符 | 描述 |
---|---|
() | 捕获组,用于分组和提取匹配的内容。 |
(?:) | 非捕获组,仅用于分组,不捕获匹配内容。 |
(?=) | 正向先行断言,匹配后面跟随指定模式的位置。 |
(?!) | 负向先行断言,匹配后面不跟随指定模式的位置。 |
(?<=) | 正向后行断言,匹配前面是指定模式的位置。 |
(?<!) | 负向后行断言,匹配前面不是指定模式的位置。 |
(?<name>) | 命名捕获组,为捕获组命名。 |
6. 转义字符
元字符 | 描述 |
---|---|
\ | 转义字符,用于匹配特殊字符本身(如 \. 匹配句点)。 |
7. 其他元字符
元字符 | 描述 | ||
---|---|---|---|
` | ` | 表示“或”关系(如 `a | b` 匹配 "a" 或 "b")。 |
\n | 匹配换行符。 | ||
\t | 匹配制表符。 | ||
\r | 匹配回车符。 | ||
\f | 匹配换页符。 | ||
\v | 匹配垂直制表符。 |
8. Unicode 相关
元字符 | 描述 |
---|---|
\uXXXX | 匹配 Unicode 字符(如 \u0041 匹配 "A")。 |
\p{} | 匹配 Unicode 属性(需启用 u 标志,如 \p{Letter} 匹配任意字母)。 |
\P{} | 匹配不满足 Unicode 属性的字符。 |
9. 标志(Flags)
标志 | 描述 |
---|---|
g | 全局匹配(查找所有匹配项,而不是在第一个匹配项后停止)。 |
i | 忽略大小写。 |
m | 多行匹配(使 ^ 和 $ 匹配每行的开头和结尾)。 |
u | 启用 Unicode 匹配(支持处理 Unicode 字符)。 |
y | 粘性匹配(从 lastIndex 开始匹配,且必须从该位置开始匹配成功)。 |
s | 单行模式(使 . 匹配包括换行符在内的所有字符)。 |
10. 示例
10.1 匹配邮箱
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRegex.test("test@example.com")); // 输出: true
10.2 匹配手机号
const phoneRegex = /^1[3-9]\d{9}$/;
console.log(phoneRegex.test("13800138000")); // 输出: true
10.3 提取 URL
const urlRegex = /https?:\/\/[^\s]+/;
console.log("Visit https://example.com".match(urlRegex)); // 输出: ["https://example.com"]
10.4 替换敏感词
const sensitiveRegex = /bad|naughty/gi;
console.log("This is a bad word.".replace(sensitiveRegex, "***")); // 输出: "This is a *** word."
10.5 捕获日期
const regex = /(\d{4})-(\d{2})-(\d{2})/;
console.log('2024-10-15'.match(regex)) //输出: '2024-10-15'
11. 总结
JavaScript 正则表达式的元字符是定义匹配模式的核心工具。以下是元字符的分类:
-
基本元字符:如
.
、\d
、\w
、^
、$
等。 -
字符类:如
[]
、[^]
。 -
量词:如
*
、+
、?
、{n}
等。 -
分组和捕获:如
()
、(?:)
、(?=)
等。 -
转义字符:如
\
。 -
其他元字符:如
|
、\n
、\t
等。 -
Unicode 相关:如
\uXXXX
、\p{}
、\P{}
。