实用正则表达式收集
本文整理了日常开发中最常用的正则表达式,涵盖表单验证、数据提取、文本清理等场景,并附带简要说明。
一、表单验证
1. 验证邮箱
/^[w.-]+@[w.-]+.w+$/
说明:支持常见的邮箱格式,如 name@example.com、user.name@sub.example.co.uk 等。
2. 验证手机号(中国大陆)
/^1[3-9]d{9}$/
说明:匹配以1开头,第二位为3-9,后面9位数字的手机号。
3. 验证身份证号(18位)
/^[1-9]d{5}(18|19|20)d{2}(0[1-9]|1[0-2])(0[1-9]|[12]d|3[01])d{3}[dXx]$/
说明:粗略验证格式,包括出生日期和校验位。
4. 验证网址(URL)
/^https?://[w-]+(.[w-]+)+[/#?]?.*$/i
说明:匹配 http 或 https 开头的网址。
5. 验证整数或小数
/^-?d+(.d+)?$/
说明:可选负号,整数部分至少一位,小数部分可选。
二、数据提取
1. 从文本中提取所有数字
/d+/g
2. 提取中文字符
/[u4e00-u9fa5]/g
3. 提取 HTML 标签中的文本
/<[^>]*>([^<]*)[^>]*>/g
说明:需配合分组获取标签内容。
4. 提取日志中的 IP 地址
/(?:[0-9]{1,3}.){3}[0-9]{1,3}/g
说明:简单的 IPv4 匹配,更严格的版本可参考前面 IP 地址验证。
三、文本替换与清理
1. 去除多余空格(首尾空格)
/^s+|s+$/g
替换为:空字符串
2. 将连续多个空格替换为单个空格
/s+/g
替换为:一个空格
3. 日期格式转换(yyyy-mm-dd → dd/mm/yyyy)
/(d{4})-(d{2})-(d{2})/
替换为:$3/$2/$1
4. 隐藏手机号中间四位
/(d{3})d{4}(d{4})/
替换为:$1****$2
四、高级技巧
1. 使用分组捕获和反向引用
反向引用可以在正则表达式中引用前面捕获组的内容。例如,匹配重复的单词:(w+)s+1 可匹配 "hello hello"。
2. 零宽断言(Lookahead / Lookbehind)
- 正向先行断言 (?=...):匹配后面跟着指定模式的位置。例如
d+(?=px)匹配 "12px" 中的 "12"(不包含 px)。 - 负向先行断言 (?!...):匹配后面不跟着指定模式的位置。
- 正向后行断言 (?<=...):匹配前面是指定模式的位置(需要较新 JavaScript 支持)。
- 负向后行断言 (?:匹配前面不是指定模式的位置。
示例: 从价格中提取数字,但排除折扣价:(?<=¥)d+ 匹配 "¥100" 中的 100(假设支持后行断言)。
3. 忽略大小写、全局匹配等标志
在 JavaScript 中,正则表达式后可以跟标志:g(全局)、i(忽略大小写)、m(多行)、s(点号匹配换行)、u(Unicode)、y(粘附)。
五、常见错误与调试
- 忘记转义特殊字符:如要匹配
.本身,应写作.。 - 量词范围错误:如
{1,3}不能写成{1, 3}(有空格)。 - 贪婪匹配导致意外结果:记得使用非贪婪版本
?。 - 分组未捕获:使用
(?:...)表示非捕获分组。
掌握这些技巧后,您可以在开发中更高效地处理字符串。建议多使用在线工具测试并收藏常用正则片段。