什么是正则表达式

正则表达式(Regular Expression,简称 regex)是一套描述字符串匹配规则的语法。用一个简短的"模式字符串",就能表达"查找所有邮箱地址""匹配所有以 1 开头的 11 位数字""把 HTML 标签去掉"等复杂需求。

// 例:匹配中国大陆手机号(简化版)
正则:1[3-9]\d{9}

// 在文本中会匹配到:
13912345678  ← 匹配
18887654321  ← 匹配
12345678901  ← 不匹配(不是 1 开头)

几乎所有编程语言(JavaScript、Python、Java、Go、PHP 等)都内置正则引擎,写一次正则可以在代码、编辑器搜索、命令行工具(grep、sed)中复用。但正则有自己的一套"暗号"语法,初学者容易写错。在线测试工具的价值就在于:每敲一个字符,立刻看到匹配结果

在线测试正则表达式的步骤

  1. 打开 正则表达式测试工具,在「正则表达式」输入框中编写你的模式。
  2. 在「测试文本」区域粘贴你需要搜索的文本内容。
  3. 匹配结果实时高亮显示在测试文本中,右侧列出所有匹配项和捕获组。
  4. 如果需要替换,切换到「替换」标签,输入替换内容(支持 $1、$2 反向引用),预览效果后复制。

所有操作在浏览器本地运行,测试文本不会被上传到任何服务器。

核心功能一览

实时高亮匹配

输入正则的同时即时在测试文本中高亮所有匹配内容,所见即所得。

分组捕获提取

用括号分组的子匹配项单独列出,方便提取邮箱的用户名和域名等。

替换与反向引用

支持 $1、$2 等反向引用,在替换中引用捕获到的内容。

常用模式模板

内置邮箱、手机号、URL、身份证号等常用正则,一键插入修改。

常用正则速查表

用途正则表达式说明
邮箱\w+@\w+\.\w+基础版,匹配 user@domain.com
手机号(中国)1[3-9]\d{9}1 开头 + 第二位 3-9 + 9 位数字
URLhttps?://[^\s]+匹配 http 或 https 开头的链接
身份证号(18位)\d{17}[\dXx]17 位数字 + 数字或 X
IP 地址\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}基础匹配,需配合范围校验
中文汉字[一-龥]+匹配连续的中文字符

贪婪匹配 vs 懒惰匹配:一个常见的坑

文本:<div>标题</div><div>内容</div>

贪婪匹配:<.*>
  结果:匹配整行 <div>标题</div><div>内容</div>(全吃掉了!)

懒惰匹配:<.*?>
  结果:分别匹配 <div>、</div>、<div>、</div>

默认的 *+贪婪的,会尽可能多地匹配。在量词后加 ? 变成懒惰匹配。从 HTML 中提取标签内容时,用懒惰匹配才能正确拆出每个标签。

常见应用场景

  • 表单校验:用正则在前端对用户输入的邮箱、手机号、邮政编码做格式校验,减少无效提交。
  • 日志分析:从海量日志中用正则提取 IP 地址、时间戳、错误码,配合 grep 或脚本统计。
  • 数据清洗:用替换功能批量去除文本中的 HTML 标签、多余空白、特殊字符。
  • 代码重构:在 IDE 中用正则查找替换,批量修改变量命名、调整 import 语句。
  • 爬虫解析:从网页源码中用正则提取特定字段(但复杂 HTML 建议用解析器)。

常见问题 FAQ

正则表达式匹配不到内容怎么排查?

推荐分步调试法:①用最简单的字面字符(如单个字母)确认匹配流程正常;②逐步增加模式复杂度,每改一处看匹配变化;③检查元字符是否正确转义(点号、括号、加号等需反斜杠转义);④注意不同语言的引擎差异,比如 JavaScript 不支持后行断言(ES2018 后已支持),grep 默认是 BRE 而非 ERE。

分组捕获和普通括号有什么区别?

(pattern) 会创建捕获组,匹配结果可通过 $1$2 反向引用。若只想用括号控制优先级但不捕获,用 (?:pattern) 非捕获分组可以提升性能。零宽断言(如 (?=...) 正向先行断言)只检查位置不消耗字符,常用于"后面必须跟着什么"但不包含在匹配结果中的场景。

在线正则测试工具安全吗?

速工具 的正则测试完全在浏览器本地运行,测试文本和正则表达式不会上传到任何服务器。但注意不要在测试文本中粘贴真实的敏感数据——虽然不上传,浏览器环境中可能被其他已加载的脚本读取。

贪婪匹配和懒惰匹配有什么区别?

贪婪匹配(.*.+)会尽可能多地匹配字符;懒惰匹配(.*?.+?)则尽可能少地匹配。提取一对标签之间的内容时,用 <tag>(.*?)</tag> 是正确的,用 <tag>(.*)</tag> 则可能从第一个标签开头吃到最后一个标签结尾。