JavaScript 正则表达式简介
正则表达式(regex 或 regexp)是一种强大的工具,用于根据给定模式搜索、替换和验证字符串。在 JavaScript(和 Node.js)中,它们通过内置的 RegExp 对象实现。
对于初学者来说,regex 的语法可能看起来令人生畏,但实际上它只是一种描述模式的语言。掌握了基本结构后,您将能够:
- 验证电子邮件、电话号码、URL
- 从文本中提取数据(解析)
- 根据复杂规则替换子字符串
- 过滤和处理用户输入
在本文中,我们将通过 Node.js 上的示例来讲解 JavaScript 正则表达式。所有示例都可以在控制台或运行时环境中运行。
在 JS 中创建正则表达式
在 JavaScript 中有两种创建 regex 的方法:
1. 字面量语法(推荐)
const pattern = /hello/; // 查找单词 "hello"模式放在两个斜杠之间。在结束斜杠之后可以指定标志(例如,i — 不区分大小写搜索)。
2. RegExp 构造函数
const pattern = new RegExp('hello'); // 等同于 /hello/当模式是动态的(由变量构成)时使用。
正则表达式标志
i— 忽略大小写(/hello/i会找到 "Hello"、"HELLO")g— 全局搜索(查找所有匹配项,而非第一个)m— 多行模式(改变锚点^和$的行为)s— 点号匹配换行符u— 支持 Unicodey— 粘性搜索(仅从 lastIndex 位置开始搜索)
const regex = /javascript/gi; // 全局且不区分大小写地查找 "javascript"JavaScript 中 regex 的主要方法
让我们看看与正则表达式一起使用的关键方法。
test() — 检查模式是否存在
返回 true 或 false。用于验证的最快方法。
const emailPattern = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i;console.log(emailPattern.test('user@example.com')); // trueconsole.log(emailPattern.test('invalid-email')); // falseexec() — 带详细信息的搜索
返回一个包含匹配项和分组的数组。使用 g 标志时会记住位置。
const str = '价格: 100 卢布, 折扣: 20 卢布';const pricePattern = /(\\d+)\\s卢布/g;let match;while ((match = pricePattern.exec(str)) !== null) { console.log(`找到: ${match[0]}, 数字: ${match[1]}`);}// 输出:// 找到: 100 卢布, 数字: 100// 找到: 20 卢布, 数字: 20match() — 在字符串中搜索
字符串方法。不带 g 标志时返回第一个匹配项(类似 exec)。带 g 标志时返回所有匹配项的数组。
const text = 'JS 是 JavaScript,不要与 Java 混淆。';const jsMatches = text.match(/Java\\w*/g);console.log(jsMatches); // ['JavaScript', 'Java']replace() — 按模式替换
将匹配项替换为新字符串。支持特殊字符($1、$&)。
const phone = '+7 (123) 456-78-90';const cleanPhone = phone.replace(/[\\s\\(\\)\\-]/g, '');console.log(cleanPhone); // +71234567890
// 使用分组进行替换const date = '2024-03-15';const reversed = date.replace(/(\\d{4})-(\\d{2})-(\\d{2})/, '$3.$2.$1');console.log(reversed); // 15.03.2024search() — 第一个匹配项的索引
const index = 'Hello world'.search(/world/);console.log(index); // 6