JavaScript 中的正则表达式及 Node.js 示例
正则表达式(regex 或 regexp)是用于搜索、替换和提取文本信息的强大工具。在 JavaScript 和 Node.js 中,它们被广泛使用:从表单验证到日志解析和请求处理。本文将通过实际示例帮助您掌握正则表达式的语法,这些示例可以直接在 Node.js 中运行。
1. 在 JavaScript 中创建正则表达式
在 JavaScript 中,有两种创建正则表达式的方法:
- 字面量语法 — 模式包含在斜杠中
/pattern/flags。推荐用于静态模式。 - RegExp 构造函数 —
new RegExp('pattern', 'flags')。用于动态构建模式的情况。
// 字面量方式const regexLiteral = /hello/i;
// RegExp 构造函数const pattern = 'hello';const regexConstructor = new RegExp(pattern, 'i');
console.log(regexLiteral.test('Hello World')); // trueconsole.log(regexConstructor.test('Hello World')); // true2. 正则表达式的基本方法
在 Node.js 和浏览器中,有四个关键方法可用于处理 regex。让我们通过示例逐一了解。
test() 方法
检查字符串是否包含与模式的匹配项。返回 true 或 false。
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;console.log(emailPattern.test('user@example.com')); // trueconsole.log(emailPattern.test('invalid-email')); // falseexec() 方法
查找匹配项并返回一个包含详细信息的数组(匹配项本身、分组、索引、输入字符串)。如果没有匹配项,则返回 null。
const text = '价格: 1500 卢布, 折扣: 300 卢布';const regex = /(\\d+)\\s卢布/g;let match;
while ((match = regex.exec(text)) !== null) { console.log(`找到: ${match[1]} 卢布`); // 输出: "找到: 1500 卢布" // 输出: "找到: 300 卢布"}match() 方法
在字符串上调用。返回匹配项数组(带 g 标志)或详细信息(不带 g 标志)。
const logLine = '错误 404: 页面未找到';const errorRegex = /(\\d{3}):\\s(.+)/;const result = logLine.match(errorRegex);
console.log(result[0]); // '404: 页面未找到'console.log(result[1]); // '404'console.log(result[2]); // '页面未找到'replace() 方法
将匹配项替换为指定的字符串或函数的结果。非常适合数据格式化。
const phone = '+7 (999) 123-45-67';const cleanPhone = phone.replace(/[\\s\\-\\(\\)\\+]/g, '');console.log(cleanPhone); // '79991234567'
// 使用分组进行替换const date = '2024-01-15';const formattedDate = date.replace(/(\\d{4})-(\\d{2})-(\\d{2})/, '$3.$2.$1');console.log(formattedDate); // '15.01.2024'3. 正则表达式的基本符号和标志
为了有效使用 regex,需要理解基本的元字符和标志。以下是其中的关键部分:
搜索符号
.— 任意字符(除换行符外)\\d— 数字 (0-9)\\w— 字母、数字或下划线\\s— 空白字符^— 字符串开头$— 字符串结尾*— 0 次或多次重复+— 1 次或多次重复?— 0 次或 1 次重复{n,m}— 从 n 到 m 次重复
标志
g— 全局搜索(所有匹配项)