正则表达式
KongHou

正则表达式

基于笔者每每提到正则都无法实际用上,故而以一篇博客加深学习印象

一、什么是正则表达式?

正则表达式(Regular Expression,简称“正则”或“regex”)是一种用来匹配字符串的规则。
通俗地讲,它是一种“文字匹配的公式”

举个例子:

  • 你想找出一篇文章中所有的电话号码
  • 想验证用户输入的邮箱格式是否正确
  • 想替换掉所有多余的空格

这些看似“复杂”的任务,用正则几行就能搞定。


二、正则的核心思想

“告诉计算机:我想找什么样的字符串。”

正则就是一串特殊的符号,比如:

1
2
3
\d+  → 匹配数字
[a-z] → 匹配小写字母
[A-Z] → 匹配大写字母

每个符号都有特定意义,组合起来就像一门“微型语言”。


三、最常见的正则符号

符号 含义 示例 匹配结果
. 匹配任意单个字符(除换行) 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` 匹配 catdog
() 分组 (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
2
3
const str = 'Hello    World   !';
console.log(str.replace(/\s+/g, ' '));
// 输出: "Hello World !"

解释:

  • \s+ 匹配一个或多个空白
  • g 表示全局替换

五、正则的修饰符(Flags)

标志 含义 示例
g 全局匹配 /a/g 匹配所有 a
i 忽略大小写 /hello/i 可匹配 Hello
m 多行匹配 /^a/m 可匹配每行开头的 a

六、常见实用案例

提取网页中的所有链接

1
2
3
const html = `<a href="https://example.com">Example</a>`;
const links = html.match(/https?:\/\/[^\s"]+/g);
console.log(links);

输出:

1
["https://example.com"]

验证密码强度

要求:必须包含字母、数字、特殊符号,长度 8~16

1
^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,16}$

解释:

  • ?=正向预查,用于“必须包含”的条件
  • 例如 (?=.*\d) 表示“必须包含数字”

提取文件名

1
2
3
const path = 'C:\\Users\\KongHou\\Desktop\\demo.txt';
const name = path.match(/[^\\]+$/)[0];
console.log(name); // 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}$
Powered by Hexo & Theme Keep
Total words 30.1k