JavaScript正则表达式通过模式匹配字符串,支持字面量或构造函数创建,含普通字符、元字符、量词和修饰符;可用test()、exec()匹配,replace()替换,并需注意转义、g标志及适用边界。

JavaScript 正则表达式通过模式(pattern)描述文本结构,引擎按规则扫描字符串,找到符合模式的子串——匹配成功后可提取、验证或替换内容。
正则表达式的基本构成
一个正则表达式由字面量(如 /abc/)或构造函数(new RegExp("abc"))创建。核心包括:
- 普通字符:如 a、1,匹配自身
- 元字符:如 .(匹配任意单字符)、^(行首)、$(行尾)、\d(数字)、\w(单词字符)
- 量词:如 *(0次或多次)、+(1次或多次)、?(0次或1次)、{2,5}(2到5次)
- 修饰符(flags):如 g(全局匹配)、i(忽略大小写)、m(多行模式)
用 test() 和 exec() 进行匹配
test() 返回布尔值,适合做条件判断;exec() 返回匹配结果对象(含 index、0、groups 等),适合提取内容。
例如检查邮箱格式:
立即学习“Java免费学习笔记(深入)”;
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
console.log(emailRegex.test("user@example.com")); // true
console.log(emailRegex.test("invalid@")); // false
提取日期中的年份和月份:
const dateRegex = /(\d{4})-(\d{2})-\d{2}/;
const match = dateRegex.exec("2023-09-15");
console.log(match[1]); // "2023"
console.log(match[2]); // "09"
用 replace() 进行文本替换
replace() 接收正则表达式(支持 g 修饰符实现全部替换)和替换内容。替换内容可以是字符串,也可以是函数——函数参数包含匹配项、分组、位置等,适合动态处理。
- 简单替换:"hello world".replace(/o/g, "0") → "hell0 w0rld"
- 带分组的替换:"2023-09-15".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1") → "09/15/2023"
- 函数式替换(转为大写首字母):
"javascript is cool".replace(/\b\w/g, c => c.toUpperCase()); // "Javascript Is Cool"
常见陷阱与建议
正则容易写错,尤其在边界和转义上:
- 字符串中反斜杠需双写:RegExp("\\d+"),而字面量写为 /\d+/
- 忘记 g 标志会导致只替换第一个匹配项
- . 默认不匹配换行符,需要 /s(ES2022+)或手动加 [\s\S]
- 过度使用正则处理复杂结构(如嵌套 HTML、JSON)不如用专用解析器可靠
不复杂但容易忽略










