匹配简单的邮箱格式
^[\w.+-]+@[\w-]+\.[\w.-]+$learner@coddy.tech
它能识别 something@something.something 这种基本格式。真实世界中的邮箱校验要宽松得多,表单里更推荐使用 type="email" 再加上服务器端校验。
测试正则表达式,用动画高亮显示匹配结果。
最后更新
Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。
正则表达式测试工具让你输入一个正则表达式,立刻看到它在示例文本中匹配到了什么。开发者用 regex(正则表达式)来校验输入、从字符串中提取数据、搜索日志、清洗文本、编写编辑器命令,以及制定查找替换规则。
正则表达式一开始看起来很晦涩,因为寥寥几个符号就承载了大量含义。实时测试工具能帮你看懂它:你每输入一个字符,高亮的匹配结果和捕获组都会随之更新,你可以反复尝试,直到模式完全符合你的要求。
不同编程语言使用的正则引擎略有差别(JavaScript、PCRE、Python、Java、Go、.NET)。基础部分,也就是字符、字符类、量词、锚点和分组,在哪里都通用。高级特性(后行断言、命名分组、占有量词)才是各引擎出现分歧的地方。
\d+ 匹配一串数字,但它并不知道这个数字是否合理。g 查找所有匹配,i 忽略大小写,m 让 ^ 和 $ 匹配每行的开头和结尾,s 让 . 也能匹配换行符。(...) 能提取匹配中的一部分,而不只是判断整个字符串是否匹配,这是解析文本的关键。? 就变成惰性的(尽可能少地匹配)。在模式输入框中输入正则表达式。不要加两边的 / 斜杠,它们是 JavaScript 字面量的语法,不属于模式本身。
最常用的是 g(查找所有匹配)和 i(不区分大小写)。需要按行使用锚点时用 m,想让 . 匹配换行符时用 s。
把示例文本放进测试区域。匹配结果会随着你的输入高亮显示,捕获组列在匹配列表下方。
每个匹配都会显示它的位置、完整文本以及捕获到的分组。用它来确认模式匹配到了你想要的内容,并跳过了不想要的内容。
收紧量词、添加锚点(^、$),或者转义字面字符(\.、\?),直到匹配结果和分组完全符合你的代码需要。
这 20% 的正则语法,能覆盖你 99% 的日常使用。收藏这一页,这是记住语法最快的方法。完整语法请参阅 MDN 的正则表达式指南。
| 符号 | 含义 | 示例 |
|---|---|---|
. | 任意单个字符(换行符除外) | a.c 匹配 abc、a-c |
\d \D | 数字 / 非数字 | \d+ 匹配 123 |
\w \W | 单词字符(字母/数字/_)/ 非单词字符 | \w+ 匹配 hello_1 |
\s \S | 空白字符 / 非空白字符 | \s+ 匹配空格和制表符 |
[abc] | a、b、c 中的任意一个 | [aeiou] 匹配一个元音字母 |
[^abc] | 不是 a、b、c 中的任何一个 | [^0-9] 匹配非数字 |
* + ? | 前一项出现 0 次及以上、1 次及以上、0 或 1 次 | a+ 匹配 a、aaa |
{n} {n,m} | 恰好 n 次 / n 到 m 次 | \d{3,5} 3 到 5 位数字 |
^ $ | 字符串的开头 / 结尾(使用 m 时为行的开头 / 结尾) | ^Error 以 Error 开头的行 |
(...) | 捕获组 | (\d+) 捕获这些数字 |
(?:...) | 非捕获组 | (?:foo|bar) 只分组,不捕获 |
a|b | 或运算:a 或 b | yes|no |
\b | 单词边界 | \bcat\b 匹配 cat 而不匹配 cats |
^[\w.+-]+@[\w-]+\.[\w.-]+$learner@coddy.tech
它能识别 something@something.something 这种基本格式。真实世界中的邮箱校验要宽松得多,表单里更推荐使用 type="email" 再加上服务器端校验。
\d+Lesson 12 has 3 tasks and 2 quizzes.
加上 g 标志后,它会找出每一串数字:12、3、2。\d+ 在正则中的意思就是“一个或多个数字”。
/users/(\d+)/users/42/profile
完整匹配是 /users/42,而捕获组 (\d+) 只提取出 42。在代码中真正用上正则匹配结果,靠的就是捕获组。
<.+><.+?><b>hello</b>
贪婪版本会匹配整个字符串 <b>hello</b>,因为 .+ 会尽可能多地吞掉字符。惰性版本(+?)在遇到第一个 > 时就停下,所以只匹配 <b> 和 </b>。
.、?、+、(、)、[、]、{、}、\、^、$、|。想按字面意思匹配它们时,要在前面加上 \。.*,结果匹配到远超预期的内容。改用 .*? 或更具体的字符类。g 标志,然后奇怪为什么只有第一个匹配被高亮。Regex 是 regular expression(正则表达式)的缩写,是一种用来匹配文本的简洁模式语言。几乎所有编程语言,以及很多编辑器和命令行工具里都有同样的概念。
\d、\w、[abc])和量词(*、+、?、{n,m})。用正则测试工具反复调整,直到模式恰好匹配你想要的情况。\w 是什么意思?\w 匹配一个单词字符,即字母、数字或下划线。\W 正好相反(任意非单词字符)。具体包含哪些字符,取决于引擎和是否开启 Unicode 标志。.* 会尽可能多地匹配。改用惰性量词(.*?),或者用更具体的字符类,让它在你想要的位置停下。re、Java、Go 和 .NET 支持的标志和高级特性(后行断言、命名分组、占有量词)各不相同。应该,但要循序渐进。先学字面字符、字符类、量词、锚点、标志和捕获组。环视断言、命名分组和条件正则留到以后再学。