正则表达式详解与实战指南:从入门到常见案例
正则表达式详解与实战指南:从入门到常见案例
原文 -> 正则表达式详解与实战指南:从入门到常见案例
正则表达式(Regular Expression,简称 RegExp)是编程中一项非常实用的技能。
它就像一把“字符串搜索利器”,能够帮助我们快速匹配、查找、验证或替换文本。
无论是验证邮箱、手机号,还是提取网页中的信息,正则表达式都能大显身手。
这篇文章将带你从基础符号到常见实战一步步掌握它。
一、什么是正则表达式?
正则表达式是一种用特定规则描述字符串模式的语法。
举个例子:
如果我们想找出一段文字中所有的电话号码,可以用一条规则去描述“电话号码的格式”,这条规则就是正则表达式。
例如:
/\d{11}/
这条规则表示——匹配连续的 11 个数字。
二、正则表达式的基本语法符号
下面是最常用的正则符号,理解它们,你就掌握了核心。
| 符号 | 含义 | 示例 | 匹配示例 |
|---|---|---|---|
. | 匹配除换行符外的任意字符 | /a.b/ | “acb”、“a_b” |
\d | 数字,等价于 [0-9] | /\d\d/ | “12”、“45” |
\w | 字母、数字、下划线 | /\w+/ | “abc123” |
\s | 空白字符(空格、换行等) | /\s+/ | “ ”、“\n” |
^ | 匹配字符串开头 | /^a/ | “apple” ✅,“banana” ❌ |
$ | 匹配字符串结尾 | /a$/ | “banana” ✅,“apple” ❌ |
[] | 字符集,匹配方括号内任一字符 | /[abc]/ | 匹配 “a”、“b” 或 “c” |
[^ ] | 否定字符集,匹配除括号内字符外的任意字符 | /[^0-9]/ | 匹配任何非数字 |
* | 重复 0 次或多次 | /go*/ | “g”、“go”、“gooo” |
+ | 重复 1 次或多次 | /go+/ | “go”、“goo” |
? | 可有可无(0 或 1 次) | /colou?r/ | “color”、“colour” |
{n} | 重复 n 次 | /\d{4}/ | “2025” |
{n,} | 至少重复 n 次 | /a{2,}/ | “aa”、“aaaa” |
{n,m} | 重复 n 到 m 次之间 | /\d{2,4}/ | “12”、“1234” |
() | 分组,用于提取或重复匹配 | /(ab)+/ | “ab”、“abab” |
| ` | ` | 或,匹配多个规则之一 | `/cat |
\ | 转义字符 | /\./ 匹配一个点 . | “.” |
三、在 JavaScript 中如何使用正则
在 JavaScript 里,正则通常有两种用法:
直接字面量创建:
let reg = /^[A-Z]\d{3}$/;
console.log(reg.test("A123")); // true
使用构造函数:
let reg = new RegExp("^[A-Z]\\d{3}$");
常用方法:
| 方法 | 说明 |
|---|---|
.test(str) | 判断字符串是否匹配,返回 true / false |
.match(reg) | 从字符串中提取匹配内容 |
.replace(reg, newStr) | 替换匹配内容 |
.split(reg) | 按正则规则分割字符串 |
四、实战示例:日常最常见的几类正则
1. 验证邮箱
const emailReg = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
console.log(emailReg.test("user@example.com")); // true
解释:
[^\s@]+:匹配一个或多个非空格、非@的字符@:必须包含@\.:点号[^\s@]+:顶级域名部分(如 com、cn)
2. 验证中国大陆手机号
const phoneReg = /^1[3-9]\d{9}$/;
console.log(phoneReg.test("13812345678")); // true
解释:
- 以
1开头 - 第二位是 3~9
- 后面跟 9 位数字
3. 匹配身份证号(简化版)
const idReg = /^\d{15}|\d{18}$/;
console.log(idReg.test("440102199912123456")); // true
4. 验证是否为纯字母
const letterReg = /^[A-Za-z]+$/;
5. 提取网页中的所有链接
const html = '<a href="https://example.com">Example</a>';
const linkReg = /href="(.*?)"/g;
console.log(html.match(linkReg)); // ['href="https://example.com"']
6. 去掉多余空格
let text = " Hello world ";
console.log(text.replace(/\s+/g, " ").trim()); // "Hello world"
五、正则表达式的小技巧
- 测试工具推荐:
- regex101.com
- regexr.com
这些网站能实时显示匹配效果,非常适合学习和调试。
- 逐步构建复杂规则
不要一次性写一长串正则,先写小的片段,逐步测试。 - 加上注释
在复杂正则中使用x模式(某些语言支持)或多行字符串加注释,方便理解。
六、结语
正则表达式初看“天书”,但掌握核心符号后,它其实非常实用。
一句话总结:
正则表达式不是魔法,而是“用规则描述字符串”的语言。
无论你是前端、后端,还是数据工程师,掌握正则都能让你的代码更高效、更优雅。
