正则表达式通过捕获组和断言实现高效文本处理。使用()定义捕获组,\1反向引用首个组,如匹配重复词“the the”;可命名捕获组提升可读性,通过groups属性访问。利用(?=...)正向前瞻、(?!...)负向前瞻、(?

处理 JavaScript 中的文本,正则表达式是绕不开的强大工具。掌握其进阶用法,能让你在字符串匹配、提取、替换等操作中游刃有余。下面从实际应用出发,深入几个关键点,帮你提升正则实战能力。
捕获组与反向引用
捕获组通过括号 () 定义,用于提取匹配的子字符串或在模式中重复使用已匹配的内容。
例如,匹配重复的单词:
const regex = /\b(\w+)\s+\1\b/g;const text = "The the sky is blue blue.";
console.log(text.match(regex)); // ["The the", "blue blue"]
这里的 \1 就是反向引用,指向第一个捕获组的内容。你也可以命名捕获组,使代码更清晰:
立即学习“Java免费学习笔记(深入)”;
const regex = /\b(?word>\w+)\s+\kconst match = regex.exec("Hello hello");
console.log(match.groups.word); // "Hello"
前瞻与后瞻断言
断言不消耗字符,只判断位置是否满足条件。常见的有正向/负向前瞻和后瞻。
- (?=...) 正向前瞻:后面必须跟着指定内容
- (?!...) 负向前瞻:后面不能是指定内容
- (? 正向后瞻:前面必须是指定内容
- (? 负向后瞻:前面不能是指定内容
比如,提取金额中紧跟 $ 符号但不包含符号的数字:
const regex = /(? const text = "Price: $29.99, tax: $3.50";console.log(text.match(regex)); // ["29.99", "3.50"]
或者匹配不在引号内的单词 and:
const regex = /(?修饰符的灵活运用
JavaScript 支持的修饰符包括 g(全局)、i(忽略大小写)、m(多行模式)、u(Unicode)和 s(dotAll)。合理组合能应对复杂场景。
例如,匹配多行文本中的注释块:
const regex = /\/\*[\s\S]*?\*\//g;// 或使用 dotAll 模式
const regex2 = /\/\*.*?\*\//gs;
处理 Unicode 字符时,启用 u 标志可正确识别 emoji 或中文:
const regex = /^\p{Script=Han}+$/u;console.log(regex.test("你好")); // true
动态构建正则表达式
有时模式来自用户输入或变量,需使用 RegExp 构造函数。注意转义特殊字符。
function escapeRegExp(string) {return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
const searchTerm = "file.txt";
const regex = new RegExp(escapeRegExp(searchTerm), 'i');
这样可安全地将用户输入转换为正则模式,避免语法错误或注入问题。
基本上就这些。正则不是背语法,而是理解机制后不断练习。遇到复杂文本处理,拆解需求,逐步构造模式,调试时善用 regex101.com 这类工具,效率会高很多。











