Skip to content
DocsAll
技巧

正则表达式实战:常见文本处理案例

Timi Tian · 发布于 2026年3月24日 · 更新于 2026年7月12日
正则表达式Regex文本处理

正则的三大实战场景

正则实际用起来就三类操作:

  • 验证:判断文本是否符合格式(如邮箱、手机号)
  • 提取:从文本中找出符合模式的内容(如所有 URL、所有金额)
  • 替换:把符合模式的部分换成别的(如统一日期格式、脱敏手机号)

下面用实际案例演示。

验证类案例

验证手机号

正则:^1[3-9]\d{9}$

要点:用 ^ 和 $ 锚定首尾,确保整串是手机号而不是包含手机号的更长文本。第二位限定 3~9 是当前号段规则。

验证邮箱

正则:^[\w.-]+@[\w.-]+.\w+$

要点:简化版够用,严格邮箱正则非常复杂。实际项目用简化版 + 发验证邮件双重保证。

验证身份证

正则:^\d{17}[\dXx]$

要点:18 位,前 17 位数字,最后一位数字或 X。这个只验证格式,不验证校验码。

验证 URL

正则:^https?://[\w.-]+

要点:http 或 https 开头,接域名。简化版,完整 URL 正则极复杂。

提取类案例

提取所有手机号

正则:1[3-9]\d{9}

不用 ^ $,找出文本里所有手机号。用全局匹配(g 标志)。

提取所有 URL

正则:https?://[\w./?=&%-]+

匹配 http(s) 开头的 URL。实际 URL 字符更复杂,按需调整字符集。

提取所有金额

正则:[¥$]\d+(?:.\d+)?

匹配 ¥ 或 $ 开头的金额,小数可选。如 ¥100、$99.9。

提取 HTML 标签内容

正则:<a[^>]*>([^<]+)

提取 a 标签里的文字。括号分组捕获文字内容。注意这种正则处理 HTML 不够健壮,复杂 HTML 用解析器更稳。

替换类案例

手机号脱敏

把中间 4 位换成星号:1[3-9]\d{9} 替换成保留前 3 后 4。

实际用捕获分组:正则 (1[3-9]\d)\d{4}(\d{4}),替换成 1\1****\2。\1 和 \2 引用分组。

统一日期格式

把 2026/07/12 转成 2026-07-12:正则 (\d{4})/(\d{2})/(\d{2}),替换成 \1-\2-\3。

去除多余空格

把多个连续空格转成一个:正则 \s+,替换成单个空格。

删除 HTML 标签

去掉所有 HTML 标签只留文字:正则 <[^>]+>,替换成空。注意会丢掉标签属性里的 > 之类,复杂场景用解析器。

调试技巧

用测试工具逐步验证

正则测试工具

  1. 输入正则
  2. 输入测试文本(含该匹配和不该匹配的样例)
  3. 看高亮匹配结果
  4. 逐步调整正则直到结果正确

先匹配再优化

先写一个能匹配的正则,再考虑优化(性能、精度)。别一上来追求完美。

用在线正则可视化

复杂正则用可视化工具拆解结构,理清每段含义。

注意边界情况

  • 空字符串
  • 只有部分匹配的字符串
  • 含特殊字符的字符串
  • 超长字符串

可复用的正则模式

中文

[\u4e00-\u9fa5]+

邮政编码

^\d{6}$

QQ 号

^[1-9]\d{4,10}$

十六进制颜色

^#[0-9a-fA-F]{6}$

版本号

^\d+.\d+.\d+$

常见坑

贪婪匹配

.* 会匹配过多。提取标签内容用 [^<]+ 而非 .*,避免跨标签匹配。

特殊字符未转义

匹配点、星、问号等元字符要转义。匹配反斜杠本身要写 \。

跨行匹配

默认 . 不匹配换行。处理多行文本要开启单行模式或用 [\s\S] 匹配任意字符。

性能问题

catastrophic backtracking(灾难性回溯):嵌套量词如 (a+)+ 在某些输入下极慢。复杂正则注意性能,超长文本先截断再匹配。

小结

正则实战分验证、提取、替换三类。验证用 ^ $ 锚定,提取用全局匹配,替换用捕获分组引用。写正则先用工具测试验证,再优化。记住几个常用模式(手机号、邮箱、日期、URL),日常够用。DocsAll 正则测试工具浏览器端运行,随写随测,文本不上传。

T
Timi Tian 创始人 / 全栈工程师

DocsAll 创始人,10 年全栈开发经验,专注浏览器端文档处理技术与隐私保护架构。前新加坡科技公司技术负责人。