11、正则表达式常用技巧
2025/9/23大约 2 分钟
正则表达式常用技巧
掌握一些常用的正则表达式技巧可以大大提高你的文本处理效率。本文将介绍一些在日常开发中常用的正则表达式技巧。
1. 使用字符类和量词
字符类和量词是正则表达式中最常用的元素之一:
字符类
表达式 | 描述 |
---|---|
[abc] | 匹配 a、b 或 c 字符 |
[^abc] | 匹配除了 a、b 或 c 以外的任何字符 |
[a-z] | 匹配 a 到 z 范围内的任何小写字母字符 |
[A-Z] | 匹配 A 到 Z 范围内的任何大写字母字符 |
[0-9] | 匹配 0 到 9 范围内的任何数字字符 |
量词
表达式 | 描述 |
---|---|
* | 匹配前面的子表达式零次或多次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式零次或一次 |
{n} | 精确匹配 n 次 |
{n,} | 匹配至少 n 次 |
{n,m} | 匹配至少 n 次但不超过 m 次 |
2. 贪婪匹配与非贪婪匹配
默认情况下,正则表达式是贪婪的,这意味着它们会尽可能多地匹配字符。通过在量词后添加 ?
,可以使匹配变为非贪婪模式:
const text = '<div>内容1</div><div>内容2</div>';
// 贪婪匹配 - 会匹配整个字符串
console.log(text.match(/<div>.*<\/div>/)[0]);
// 输出: <div>内容1</div><div>内容2</div>
// 非贪婪匹配 - 只匹配第一个 div
console.log(text.match(/<div>.*?<\/div>/)[0]);
// 输出: <div>内容1</div>
3. 捕获组和非捕获组
捕获组
用小括号 ()
包裹的部分称为捕获组,它可以保存匹配的结果供后续使用:
const date = '2025-09-23';
const regex = /(\d{4})-(\d{2})-(\d{2})/;
const matches = regex.exec(date);
console.log(matches[0]); // 2025-09-23
console.log(matches[1]); // 2025
console.log(matches[2]); // 09
console.log(matches[3]); // 23
非捕获组
有时候我们只想要分组但不需要捕获结果,可以使用非捕获组 (?:pattern)
:
const text = 'JavaScript or TypeScript';
const regex = /(?:Java|Type)Script/g;
const matches = text.match(regex);
console.log(matches); // ['JavaScript', 'TypeScript']
4. 前瞻和后顾断言
正向前瞻断言 (?=pattern)
匹配后面跟着特定模式的位置:
const text = 'price: $10, cost: $5';
const regex = /\$\d+(?=,)/g; // 匹配后面跟着逗号的价格
console.log(text.match(regex)); // ['$10']
负向前瞻断言 (?!pattern)
匹配后面不跟着特定模式的位置:
const text = 'file1.jpg file2.txt file3.jpg';
const regex = /\w+\.(?!jpg)\w+/g; // 匹配不是jpg的文件
console.log(text.match(regex)); // ['file2.txt']
正则表达式是一个强大的工具,掌握这些技巧将有助于你更高效地处理文本和数据。在下一篇文章中,我们将探讨如何使用正则表达式进行字符串替换。