DevToolBox免费
博客

每个开发者都需要的 20 个 Regex 正则表达式:可直接复制粘贴的示例

11 分钟阅读作者 DevToolBox
Ad Space

别再手写正则表达式了。这里整理了 20 个经过实战检验的 Regex 模式,覆盖最常见的校验和提取需求。每个模式都附带说明和匹配示例。

使用我们的 Regex 测试器实时测试任意模式 →

校验模式

1. Email Address

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

匹配: user@example.com, john.doe+tag@company.co.uk

不匹配: user@, @example.com, user@.com

2. URL (HTTP/HTTPS)

^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)$

匹配: https://example.com, http://www.site.co.uk/path?q=1

3. Phone Number (International E.164)

^\+[1-9]\d{1,14}$

匹配: +14155552671, +442071234567

适用于国际电话号码。美国号码见模式 #4。

4. US Phone Number

^(\+1)?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

匹配: (415) 555-2671, 415-555-2671, +1 415.555.2671

5. Strong Password

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

要求:8+ 字符,含大小写、数字和特殊字符。

匹配: MyP@ss1word | 不匹配: password, 12345678

6. IPv4 Address

^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$

匹配: 192.168.1.1, 10.0.0.255

不匹配: 256.1.1.1, 192.168.1

7. IPv6 Address (Simplified)

^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$

匹配完整 IPv6 地址,如 2001:0db8:85a3:0000:0000:8a2e:0370:7334

8. Date (YYYY-MM-DD)

^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

匹配: 2026-01-15, 2025-12-31

不匹配: 2026-13-01, 2026-00-15

提取模式

9. Extract All Emails from Text

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

配合全局标志 (g) 可找出文本中所有邮箱。

10. Extract All URLs from Text

https?:\/\/[^\s<>\"']+

更宽松的 URL 模式,用于提取(非严格校验)。

11. Extract HTML Tags

<([a-zA-Z][a-zA-Z0-9]*)\b[^>]*>(.*?)<\/\1>

捕获标签名和内容。使用 \1 反向引用匹配闭合标签。

警告:解析复杂 HTML 时应使用 DOMParser 或 cheerio 等解析器。

12. Extract Numbers from String

-?\d+\.?\d*

匹配整数和小数,支持正负。 42, -3.14, 0.5

13. Extract Hashtags

#[a-zA-Z0-9_]+

匹配: #javascript, #dev_tools, #React18

格式模式

14. Credit Card Number (Basic)

^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|6(?:011|5[0-9]{2})[0-9]{12})$

匹配: Visa, Mastercard, Amex, Discover.

生产环境请使用支付处理商的验证,切勿仅靠 Regex 验证卡号。

15. Hex Color Code

^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$

匹配: #FFF, #FF5733, #FF573380

16. Semantic Version (SemVer)

^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$

匹配: 1.0.0, 2.1.3-beta.1, 1.0.0+build.123

17. UUID (Any Version)

^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

匹配: f47ac10b-58cc-4372-a567-0e02b2c3d479

文本处理模式

18. Trim Whitespace (Leading + Trailing)

^\s+|\s+$

配合 replace 去除首尾空白: text.replace(/^\\s+|\\s+$/g, '')

19. Multiple Spaces to Single Space

\s{2,}

替换为单个空格: text.replace(/\\s{2,}/g, ' ')

20. Markdown Bold Text

\*\*(.+?)\*\*

捕获 ** 之间的文本,分组 1 为加粗内容。

在代码中使用这些模式

// JavaScript
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
emailRegex.test('user@example.com'); // true

// Python
import re
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
re.match(pattern, 'user@example.com')  # Match object

// Java
Pattern pattern = Pattern.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$");
pattern.matcher("user@example.com").matches(); // true

使用 Regex 测试器测试所有模式 →

常见问题

这些 Regex 模式是否兼容所有编程语言?

这些模式使用标准正则语法,兼容 JavaScript、Python、Java、C#、Go、PHP、Ruby。语法细节可能有差异,但核心模式在主流语言中均可使用。

生产环境是否应该用 Regex 验证邮箱?

用于基本格式校验时,这些模式足够。但要真正验证邮箱,唯一可靠的方式是发送确认邮件。可将 Regex 用于客户端 UX 校验,但不要作为唯一验证手段。

贪婪和懒惰量词有什么区别?

贪婪量词(*、+、?)尽可能多地匹配。懒惰量词(*?、+?、??)尽可能少地匹配。例如对 "<b>bold</b>",贪婪的 <.*> 会匹配整串,而懒惰的 <.*?> 只匹配 "<b>"。

试试这些相关工具

.*Regex Tester
Ad Space

相关文章

Docker Compose YAML 验证:10 个常见语法错误及修复方法

别再浪费时间在 Docker Compose YAML 错误上。学会识别和修复 10 个最常见的语法错误。