第7章:正则表达式(Regular Expressions)
一、导读
1.1 本章学习目标
第7章讲解 JavaScript 的正则表达式。正则表达式是模式匹配的强大工具。
1.2 为什么第七章如此重要
正则表达式在文本处理、表单验证、数据提取等场景中不可或缺。
1.3 核心问题引导
正则表达式的基本语法是什么?
捕获组如何使用?
贪婪和非贪婪有什么区别?
正则表达式的性能问题是什么?
二、核心概念详解
7.1 基本语法
javascript
// 创建正则表达式
var re1 = /pattern/flags;
var re2 = new RegExp("pattern", "flags");
// 标志
// g: 全局匹配
// i: 忽略大小写
// m: 多行模式
// 字符类
/[abc]/ // 匹配 a, b 或 c
/[^abc]/ // 不匹配 a, b, c
/[a-z]/ // 匹配 a 到 z
/\d/ // 数字 [0-9]
/\w/ // 单词字符 [a-zA-Z0-9_]
/\s/ // 空白字符
// 量词
/a*/ // 0 或多次
/a+/ // 1 或多次
/a?/ // 0 或 1 次
/a{3}/ // 恰好 3 次
/a{2,5}/ // 2 到 5 次7.2 捕获组
javascript
var re = /(\d{4})-(\d{2})-(\d{2})/;
var match = re.exec("2024-01-15");
match[0]; // "2024-01-15"(完整匹配)
match[1]; // "2024"(第1组)
match[2]; // "01"(第2组)
match[3]; // "15"(第3组)
// 命名捕获组
var re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
var match = re.exec("2024-01-15");
match.groups.year; // "2024"
match.groups.month; // "01"7.3 贪婪与非贪婪
javascript
// 贪婪(默认)
"abcabc".match(/a.*c/); // ["abcabc"]
// 非贪婪(加 ?)
"abcabc".match(/a.*?c/); // ["abc"]三、实战案例
7.1 邮箱验证
javascript
function isValidEmail(email) {
var re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return re.test(email);
}
isValidEmail("user@example.com"); // true四、本章小结
正则表达式是强大的模式匹配工具。掌握字符类、量词、捕获组,注意贪婪与非贪婪的区别。
五、思考与练习
正则表达式的基本语法是什么?
捕获组和反向引用如何使用?
贪婪和非贪婪有什么区别?
正则表达式的性能问题是什么?
如何避免正则表达式的灾难性回溯?