正则表达式
正则表达式
基于笔者每每提到正则都无法实际用上,故而以一篇博客加深学习印象
一、什么是正则表达式?
正则表达式(Regular Expression,简称“正则”或“regex”)是一种用来匹配字符串的规则。
通俗地讲,它是一种“文字匹配的公式”。
举个例子:
- 你想找出一篇文章中所有的电话号码
- 想验证用户输入的邮箱格式是否正确
- 想替换掉所有多余的空格
这些看似“复杂”的任务,用正则几行就能搞定。
二、正则的核心思想
“告诉计算机:我想找什么样的字符串。”
正则就是一串特殊的符号,比如:
1 | \d+ → 匹配数字 |
每个符号都有特定意义,组合起来就像一门“微型语言”。
三、最常见的正则符号
| 符号 | 含义 | 示例 | 匹配结果 | ||
|---|---|---|---|---|---|
. |
匹配任意单个字符(除换行) | a.c |
匹配 abc, a1c, a_c |
||
\d |
数字 | \d\d |
匹配 12, 99 |
||
\w |
单词字符(字母、数字、下划线) | \w+ |
匹配 hello, user_1 |
||
\s |
空白符(空格、Tab) | \s+ |
匹配一个或多个空格 | ||
^ |
匹配字符串开头 | ^Hello |
匹配以 Hello 开头的字符串 | ||
$ |
匹配字符串结尾 | world$ |
匹配以 world 结尾的字符串 | ||
* |
匹配 0 次或多次 | a* |
匹配 ``, a, aaa |
||
+ |
匹配 1 次或多次 | a+ |
匹配 a, aaa |
||
? |
匹配 0 次或 1 次 | a? |
匹配 ``, a |
||
{n,m} |
匹配 n~m 次 | \d{3,5} |
匹配 3~5 个数字 | ||
[] |
匹配集合中的任意字符 | [abc] |
匹配 a, b, c |
||
| ` | ` | 或(or) | `cat | dog` | 匹配 cat 或 dog |
() |
分组 | (ab)+ |
匹配 ab, abab, ababab |
🔍 四、实战:从零开始写正则
1️ 匹配手机号
1 | ^1\d{10}$ |
解释:
^开头1必须以 1 开头\d{10}再跟 10 个数字$结尾
✅ 匹配:13812345678
❌ 不匹配:23812345678, 13812345
2 匹配邮箱地址
1 | ^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ |
解释:
- 用户名前面可包含字母、数字、
._- @后是域名.后是顶级域(com, net, cn 等)
✅ 匹配:user.name-12@mail.com
3 匹配日期(yyyy-mm-dd)
1 | ^\d{4}-\d{2}-\d{2}$ |
✅ 匹配:2025-11-10
4 去除多余空格(JS 实例)
1 | const str = 'Hello World !'; |
解释:
\s+匹配一个或多个空白g表示全局替换
五、正则的修饰符(Flags)
| 标志 | 含义 | 示例 |
|---|---|---|
g |
全局匹配 | /a/g 匹配所有 a |
i |
忽略大小写 | /hello/i 可匹配 Hello |
m |
多行匹配 | /^a/m 可匹配每行开头的 a |
六、常见实用案例
提取网页中的所有链接
1 | const html = `<a href="https://example.com">Example</a>`; |
输出:
1 | ["https://example.com"] |
验证密码强度
要求:必须包含字母、数字、特殊符号,长度 8~16
1 | ^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,16}$ |
解释:
?=是正向预查,用于“必须包含”的条件- 例如
(?=.*\d)表示“必须包含数字”
提取文件名
1 | const path = 'C:\\Users\\KongHou\\Desktop\\demo.txt'; |
七、正则在工作中的应用场景
| 场景 | 示例 |
|---|---|
| 数据清洗 | 去除多余空格、标签、特殊符号 |
| 日志分析 | 提取 IP 地址、时间戳 |
| 表单验证 | 邮箱、手机号、身份证格式 |
| 文本处理 | 批量替换文件中的某些内容 |
| 抓取网页数据 | 提取特定 HTML 内容(如 <a> 标签) |
八、调试正则的神器
如果觉得正则难读,可以使用这些可视化工具:
它们能实时展示匹配结果,还会帮你解释每一部分的含义。
九、总结
| 功能 | 示例正则 |
|---|---|
| 手机号 | ^1\d{10}$ |
| 邮箱 | ^[\w.-]+@[\w.-]+\.\w+$ |
| 日期 | ^\d{4}-\d{2}-\d{2}$ |
| 去空格 | /\s+/g |
| 链接提取 | /https?:\/\/[^\s"]+/g |
| 密码强度验证 | ^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*]).{8,16}$ |