~/tutorials/regex
正则表达式入门:5 段最常用模式 + 3 个最常踩的坑
想从一段文本里抠出所有日期、邮箱、手机号,自己写正则却总是差一点:要么多吞了字符,要么一个都匹配不上,报错还看不懂——这是刚接触正则的人最常见的卡点。下面用 30 秒讲清正则到底是什么,再给你 5 段拿来即用的常用模式和 3 个最常踩的坑,配一个纯浏览器本地的在线测试台,粘上文本就能试,不上传、不注册。
正则到底是什么:一段 30 秒讲清
正则表达式就是一串带特殊记号的匹配模式,用来描述「想找什么样的文本」,匹配的是字符的排列规律。先记 4 个就够起步:. 匹配任意一个字符(换行除外)、* 表示前一个记号可出现 0 多次、() 把一段模式抓成分组方便整体取走、^ 和 $ 分别锚定整串的首尾。别的记号都是在这 4 个上面长的。
5 段拿来即用的常用模式
① 邮箱
[\w.+-]+@[\w-]+.[\w.]+,示例命中:yvfng@gmail.com。抓的是「@ 前是字母数字类字符、@ 后是域名」的主体部分。
② 手机号
1[3-9]\d{9},示例命中:13812345678。首位 1、第二位 3-9、后面 9 位数字,正好 11 位。
③ 日期
\d{4}-\d{2}-\d{2},示例命中:2026-09-25。三段数字用连字符连起来,就是最常见的 YYYY-MM-DD。
④ 抓 http(s) 链接
https?://[^\s]+,示例命中:https://yvfng.com/tutorial-regex。从协议头开始,一直吃到下一个空白。
⑤ 校验纯数字
^\d+$,示例命中:123456(整串都是数字才算命中;混进字母就不匹配)。做输入校验时最常用到。
工具:yvfng.com 的正则测试台,模式、标志、文本三件套,看命中位置、取分组、预览替换,全程在浏览器本地跑,不上传、不注册。
写正则最常踩的 3 个坑
- 反斜杠要写两层:
\d写在代码字符串里,字符串本身还要再转义一次,所以经常要写成\\d。写错一层的典型症状就是「明明对的公式却匹配不上」。 - 贪心 .* 一口气吞到行尾:
.*会尽可能多往下吃,经常把后面要抓的内容也圈进去;该用非贪心.?把「能少就少」告诉它。 - ^$ 默认只匹配整串首尾:不加
m标志时,^和$只认整个文本的开头和结尾;要在每一行都生效,得加上 m 标志。
常见问题
正则不匹配我的输入怎么办
把输入和模式都粘进在线测试台,打开高亮看模式到底圈住了哪段;再按 3 个坑逐个排:反斜杠够不够、是不是贪心吞多了、多行要不要 m 标志。
* 和 + 到底什么区别
都作用在前一个记号上:* 是 0 多次(前面可以完全不出现),+ 是 1 多次(前面至少得出现一次)。要「有就行、没有也接受」用 *,要「必须至少有一个」用 +。
为什么 \d 要写 \d
正则里的 \d 写进代码字符串时还要被字符串转义吃一层,所以多数语言里要写成 \\d。在本文的在线测试台里模式框直接接受正则原文,写 \d 就行;写到代码里才要双写。
g 标志是干嘛的
g 是全局匹配:不加 g 只返回第一个命中,加了才会把全文所有命中都找出来。测试台里要数一数一段文本里有多少个邮箱、多少条链接时,记得勾上 g。
相关工具
正则测试
模式 + 标志 + 文本三件套,高亮命中、看分组、预览替换,纯本地不上传。打开 ↗
JSON 格式化
接口返回一坨 JSON 先美化展开,再用正则按字段名把值抠出来。打开 ↗
哈希生成器
正则抓出的串要存指纹 / 去重时,本地生成 MD5、SHA-1、SHA-256,不上传。打开 ↗
回首页
更多在线工具与教程,都在首页一屏看全。回首页 ↗
一句话总结:记 4 个基本记号 → 套 1 段常用模式 → 测试台粘上文本试 → 不命中按 3 个坑自查,全程浏览器本地完成,不上传、不注册。