JavaScript 正则表达式入门
正则表达式(regex 或 regexp)是一种基于给定模式搜索、替换和验证字符串的强大工具。在 JavaScript(以及 Node.js)中,它们通过内置的 RegExp 对象实现。
对于初学者来说,正则表达式语法可能看起来令人生畏,但实际上它只是一种描述模式的语言。通过掌握基本结构,你将能够:
- 验证电子邮件、电话号码、URL
- 从文本中提取数据(解析)
- 使用复杂规则替换子字符串
- 过滤和处理用户输入
在本文中,我们将介绍JavaScript 中的正则表达式及其在 Node.js 上的示例。所有示例都可以在控制台或运行时环境中运行。
在 JS 中创建正则表达式
在 JavaScript 中,有两种创建正则表达式的方法:
1. 字面量语法(推荐)
const pattern = /hello/; // 搜索单词 "hello"模式位于两个斜杠之间。标志可以写在结束斜杠之后(例如,i — 不区分大小写搜索)。
2. RegExp 构造函数
const pattern = new RegExp('hello'); // 等同于 /hello/当模式是动态的(从变量构建)时使用。
正则表达式标志
i— 忽略大小写(/hello/i会找到 "Hello"、"HELLO")g— 全局搜索(查找所有匹配项,而不仅仅是第一个)m— 多行模式(改变锚点^和$的行为)s— 点号匹配换行符u— Unicode 支持y— 粘性搜索(仅从 lastIndex 位置搜索)
const regex = /javascript/gi; // 全局且不区分大小写地搜索 "javascript"JavaScript 中处理正则表达式的主要方法
我们来看看与正则表达式一起使用的关键方法。
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 = '你好世界'.search(/世界/);console.log(index); // 2