正则表达式入门教程:从零到实战

最后更新:2026年5月 · 阅读时间:15分钟

在线正则表达式测试器

边学边练,实时测试正则表达式匹配结果

打开正则测试器

什么是正则表达式?

正则表达式(Regular Expression,简称 Regex)是一种描述字符串模式的语言。它用特殊语法定义搜索模式,用于匹配、查找、替换文本。

正则表达式广泛应用于:

基础语法

普通字符

普通字符匹配自身:

/hello/  → 匹配 "hello world" 中的 "hello"

元字符

元字符有特殊含义,是正则表达式的核心:

元字符含义示例
.匹配任意字符(除换行符)a.c → abc, a1c, a c
\d数字 [0-9]\d{3} → 123, 456
\D非数字 [^0-9]\D+ → abc, hello
\w单词字符 [a-zA-Z0-9_]\w+ → hello_123
\W非单词字符\W → @, #, 空格
\s空白字符(空格、制表、换行)a\sb → a b
\S非空白字符\S+ → hello

字符类

用方括号定义字符集合:

[abc]     → 匹配 a 或 b 或 c
[a-z]     → 匹配任意小写字母
[A-Z0-9]  → 匹配大写字母或数字
[^abc]    → 匹配除 a、b、c 外的任意字符

量词

量词控制匹配的重复次数:

量词含义示例
*0 次或多次ab*c → ac, abc, abbc
+1 次或多次ab+c → abc, abbc
?0 次或 1 次colou?r → color, colour
{n}恰好 n 次\d{4} → 4位数字
{n,}至少 n 次\d{2,} → 2位及以上数字
{n,m}n 到 m 次\d{3,5} → 3到5位数字

贪婪 vs 非贪婪

默认量词是贪婪的,会匹配尽可能多的字符。在量词后加 ? 变为非贪婪(懒惰)模式:

// 贪婪
/".*"/   → "hello" world" 匹配 "hello" world"

// 非贪婪
/".*?"/  → "hello" world" 只匹配 "hello"

分组与引用

捕获组

() 创建捕获组,可以提取匹配的子串:

/(\d{4})-(\d{2})-(\d{2})/  → 2026-05-20
  组1: 2026  组2: 05  组3: 20

非捕获组

(?:) 创建非捕获组,不保存匹配结果:

/(?:http|https):\/\/.*/  → 匹配URL但不捕获协议

反向引用

\1\2 引用前面的捕获组:

/(\w)\1/  → 匹配重复字符,如 aa, bb, 11

锚点与边界

符号含义示例
^字符串开头^Hello → 以Hello开头
$字符串结尾world$ → 以world结尾
\b单词边界\bcat\b → 单词cat
\B非单词边界\Bcat\B → scatter中的cat

提示:^ 在字符类 [^...] 中表示"取反",在字符类外表示"开头"。

零宽断言

零宽断言只判断条件,不消耗字符:

语法名称含义
(?=...)正向前瞻后面必须匹配
(?!...)负向前瞻后面必须不匹配
(?<=...)正向后瞻前面必须匹配
(?<!...)负向后瞻前面必须不匹配

示例

// 匹配数字后面的单位
/\d(?=px)/  → "100px" 匹配 1、0、0(每个数字后跟px)

// 匹配不以 http 开头的 URL
/^(?!http).*/  → 不以http开头的字符串

// 匹配 $ 符号前面的数字
/(?<=\$)\d+/  → "$100" 匹配 100

常用正则示例

用途正则表达式
邮箱^[\w.-]+@[\w-]+\.[\w.]+$
手机号(中国大陆)^1[3-9]\d{9}$
身份证号^\d{17}[\dXx]$
IP 地址^\d{1,3}(\.\d{1,3}){3}$
URL^https?://[\w.-]+\.[a-z]{2,}(/\S*)?$
中文[一-龥]+
邮政编码^\d{6}$
HTML 标签<(\w+)[^>]*>.*?</\1>
日期 YYYY-MM-DD\d{4}-\d{2}-\d{2}
密码强度(8位+大小写+数字+特殊)^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$

常见问题

正则表达式应该加 ^ 和 $ 吗?

如果需要完全匹配(如表单验证),必须加 ^$。否则正则只要求字符串中包含匹配即可。例如 /\d{11}/ 会匹配 "abc12345678900xyz" 中的 11 位数字。

如何匹配换行符?

默认 . 不匹配换行符。在 JavaScript 中使用 s 标志:/regex/s,或使用 [\s\S] 代替 .

正则表达式性能如何优化?

提示:使用我们的在线正则测试器可以实时测试正则表达式的匹配结果,边学边练。

试试我们的正则测试器

输入正则和文本,实时查看匹配高亮

打开正则表达式测试器