前端正则表达式完全指南:从入门到实战
文章目录
- 第一章:正则表达式基础概念
- 1.1 什么是正则表达式
- 1.2 正则表达式工作原理
- 1.3 基础示例演示
- 第二章:正则表达式核心语法
- 2.1 元字符大全表
- 2.2 量词系统详解
- 2.3 字符集合与排除
- 第三章:前端常用正则模式
- 3.1 表单验证类
- 3.1.1 邮箱验证
- 3.1.2 密码强度验证
- 3.2 URL解析类
- 第四章:JavaScript中的正则使用(2500字)
- 4.1 创建正则表达式
- 4.2 常用方法详解
- 4.2.1 test()方法
- 4.2.2 exec()方法
- 第五章:表单验证实战(3000字)
- 5.1 综合验证函数示例
- 5.2 实时验证实现
- 第八章:工具与资源推荐
- 8.1 在线测试工具
- 8.2 可视化工具
- 8.3 常用正则库
- 结语
- 附件:常用正则总结
- 一、表单验证类正则(20个)
- 1. 手机号验证
- 2. 邮箱验证
- 3. 身份证号验证
- 4. 密码强度验证
- 5. 日期格式验证
- 6. 金额格式验证
- 7. 用户名验证
- 8. 车牌号验证
- 二、字符串处理类正则(15个)
- 1. 提取数字
- 2. 提取URL参数
- 3. 去除HTML标签
- 4. 匹配中文
- 5. 千分位格式化
- 6. 首字母大写
- 三、业务场景类正则(15个)
- 1. IPv4地址验证
- 2. 十六进制颜色码
- 3. 文件路径验证
- 4. 匹配Emoji表情
- 5. 银行卡号格式化
- 四、高级技巧类正则(10个)
- 1. 密码复杂度验证
- 2. 匹配嵌套HTML标签
- 3. 驼峰转中划线
- 4. 删除代码注释
- 5. 版本号匹配
- 五、特殊场景正则(10+个)
- 1. 匹配BASE64字符串
- 2. 匹配MD5哈希值
- 3. 匹配GUID/UUID
- 4. 匹配MAC地址
- 5. 匹配ISBN书号
- 六、注意事项
第一章:正则表达式基础概念
1.1 什么是正则表达式
正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式,在前端开发中广泛应用于:
- 表单验证
- 数据清洗
- URL解析
- 文本替换
- 路由匹配
1.2 正则表达式工作原理
通过引擎实现模式匹配,JavaScript使用Perl兼容的正则表达式语法(PCRE)
1.3 基础示例演示
// 手机号验证简单示例
const reg = /^1[3-9]\d{9}$/;
console.log(reg.test('13800138000')); // true
第二章:正则表达式核心语法
2.1 元字符大全表
元字符 | 说明 |
---|---|
. | 匹配除换行外任意字符 |
\d | 数字 [0-9] |
\D | 非数字 |
\w | 单词字符 [a-zA-Z0-9_] |
\s | 空白符 |
2.2 量词系统详解
// 常见量词使用示例
const examples = [{ pattern: /a?/, desc: "0或1个a" }, // 0 or 1{ pattern: /a+/, desc: "1个或多个a" }, // 1+{ pattern: /a{2,5}/, desc: "2到5个a" }, // 自定义范围
];
2.3 字符集合与排除
// 匹配元音字母的正确方式
const vowelReg = /[aeiou]/i;
// 排除数字的写法
const excludeNumber = /[^0-9]/;
第三章:前端常用正则模式
3.1 表单验证类
3.1.1 邮箱验证
// 综合邮箱验证正则
const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
3.1.2 密码强度验证
// 包含大小写字母、数字、特殊字符,至少8位
const strongPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
3.2 URL解析类
// 分解URL各组成部分
const urlRegExp = /^(https?:\/\/)?([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?$/;
第四章:JavaScript中的正则使用(2500字)
4.1 创建正则表达式
// 两种创建方式对比
const reg1 = /pattern/;
const reg2 = new RegExp('pattern');
4.2 常用方法详解
4.2.1 test()方法
// 快速验证格式
const isNumber = /\d+/;
console.log(isNumber.test('abc123')); // true
4.2.2 exec()方法
// 提取匹配结果
const result = /(\d{4})-(\d{2})/.exec('2023-08');
console.log(result[1]); // 2023
第五章:表单验证实战(3000字)
5.1 综合验证函数示例
function validateForm(data) {const rules = {username: /^[a-zA-Z]\w{5,17}$/,idCard: /(^\d{15}$)|(^\d{17}(\d|X|x)$)/,mobile: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/,};return Object.keys(data).every(key => rules[key].test(data[key]));
}
5.2 实时验证实现
<!-- HTML5结合正则验证 -->
<input type="text" pattern="\d{4}-\d{2}-\d{2}" title="请输入YYYY-MM-DD格式日期"
>
第八章:工具与资源推荐
8.1 在线测试工具
- RegExr:实时高亮测试
- Regex101:多语言支持
8.2 可视化工具
- Regexper:生成正则表达式图解
8.3 常用正则库
- validator.js
- lodash中的正则工具方法
结语
正则表达式是前端开发者必须掌握的核心技能之一。本文从基础到高级应用全面覆盖,建议收藏作为开发手册使用。后续将持续更新实际开发中的最佳实践。
附件:常用正则总结
以下是一份包含 50+ 前端常用正则表达式 的合集大全,涵盖表单验证、字符串处理、业务场景等高频需求场景。每个正则表达式均附带说明和代码示例,可直接在项目中参考使用:
一、表单验证类正则(20个)
1. 手机号验证
// 中国手机号(宽松模式)
/^(?:(?:\+|00)86)?1[3-9]\d{9}$/ // 严格模式(2023年最新号段)
/^(?:(?:\+|00)86)?1(?:3[0-9]|4[0145689]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
2. 邮箱验证
// 通用邮箱格式
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ // 企业邮箱限制(示例:禁止使用某些域名)
/^[\w-]+@(?!qq\.com|163\.com)[a-zA-Z0-9-]+\.[a-zA-Z]{2,}$/
3. 身份证号验证
// 15位或18位身份证(包含校验位)
/^(\d{15}$|^\d{17})([0-9]|X|x)$/
4. 密码强度验证
// 至少8位,包含大小写字母和数字
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/// 包含特殊字符的强密码(至少10位)
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{10,}$/
5. 日期格式验证
// YYYY-MM-DD(支持1900-2099年)
/^(19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/// DD/MM/YYYY(带闰年校验)
/(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/(19|20)\d{2}/
6. 金额格式验证
// 标准金额(支持千分位和两位小数)
/^-?\d{1,3}(,\d{3})*(\.\d{1,2})?$/// 简单金额(无千分位)
/^\d+(\.\d{1,2})?$/
7. 用户名验证
// 中文姓名(2-4个汉字)
/^[\u4e00-\u9fa5]{2,4}$/// 英文用户名(4-16位字母数字+下划线)
/^[a-zA-Z0-9_]{4,16}$/
8. 车牌号验证
// 中国车牌号(新能源+传统)
/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/
二、字符串处理类正则(15个)
1. 提取数字
// 提取字符串中所有整数
/\d+/g // 提取浮点数(含负数)
/-?\d+(?:\.\d+)?/g
2. 提取URL参数
// 获取URL查询参数
/([^?=&]+)=([^&]*)/g
3. 去除HTML标签
// 基础去标签
/<[^>]+>/g // 保留指定标签(如保留<p>和<a>)
/<(?!\/?(p|a)(\s|>))[^>]+>/gi
4. 匹配中文
// 纯中文字符串
/^[\u4e00-\u9fa5]+$/ // 包含中文
/[\u4e00-\u9fa5]/
5. 千分位格式化
// 数字添加千分位(如 1234567 → 1,234,567)
/(\d)(?=(\d{3})+(?!\d))/g
6. 首字母大写
// 将字符串中每个单词首字母大写
/\b\w+\b/g
// 配合replace方法:str.replace(regex, word => word[0].toUpperCase() + word.slice(1))
三、业务场景类正则(15个)
1. IPv4地址验证
/^(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)){3}$/
2. 十六进制颜色码
// 支持 #RGB 和 #RRGGBB
/^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6})$/
3. 文件路径验证
// Windows文件路径(含扩展名)
/^[a-zA-Z]:\\[^\\/:*?"<>|]+\.[a-zA-Z]+$/// Unix/Linux路径
/^\/(?:[^\/]+\/)*[^\/]+(?:\.\w+)?$/
4. 匹配Emoji表情
// Unicode Emoji范围
/\p{Emoji}/gu
5. 银行卡号格式化
// 每4位加空格(信用卡格式)
/(\d{4})(?=\d)/g
// 使用:'6228480402564890018'.replace(regex, '$1 ')
四、高级技巧类正则(10个)
1. 密码复杂度验证
// 必须包含大小写、数字、特殊字符且长度≥10
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{10,}$/
2. 匹配嵌套HTML标签
// 匹配<div>标签及其内容(简单场景)
/<div\b[^>]*>([\s\S]*?)<\/div>/gi
3. 驼峰转中划线
// 将驼峰式转为kebab-case(如 myVar → my-var)
/([a-z])([A-Z])/g
// 使用:str.replace(regex, '$1-$2').toLowerCase()
4. 删除代码注释
// 删除JavaScript单行与多行注释
/(\/\/.*)|(\/\*[\s\S]*?\*\/)/g
5. 版本号匹配
// Semantic Versioning(语义化版本)
/^(\d+\.){2}\d+(?:-[\w.]+)?(?:\+[\w.]+)?$/
五、特殊场景正则(10+个)
1. 匹配BASE64字符串
/^data:([a-zA-Z]+\/[a-zA-Z]+);base64,([a-zA-Z0-9+/=]+)$/
2. 匹配MD5哈希值
/^[a-fA-F0-9]{32}$/
3. 匹配GUID/UUID
/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/
4. 匹配MAC地址
/^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$/
5. 匹配ISBN书号
// ISBN-10或ISBN-13
/(ISBN)?(-)?(\d{3})(-)?(\d{1,5})(-)?(\d{3})(-)?(\d{5})(-)?(\d{1})/
六、注意事项
- 正则表达式需要根据具体业务需求调整
- 注意转义字符处理(如
.
需写成\.
) - 性能优化:避免过度复杂的正则
- 兼容性处理:部分新特性(如命名捕获组)需考虑浏览器支持
- 安全性:避免正则表达式拒绝服务攻击(ReDoS)
完整代码示例可参考以下GitHub仓库:
https://github.com/example/regex-collection
在线测试工具推荐:
- Regex101
- RegExr
可根据实际需求组合修改这些正则表达式,建议先使用在线工具验证匹配效果。
相关文章:

前端正则表达式完全指南:从入门到实战
文章目录 第一章:正则表达式基础概念1.1 什么是正则表达式1.2 正则表达式工作原理1.3 基础示例演示 第二章:正则表达式核心语法2.1 元字符大全表2.2 量词系统详解2.3 字符集合与排除 第三章:前端常用正则模式3.1 表单验证类3.1.1 邮箱验证3.1…...

【SRC实战】小游戏漏洞强制挑战
小游戏业务分析: 1、挑战成功加分,失败减分,存在段位机制,段位影响榜单排名 2、随机推荐挑战对象,随着等级升高不再推荐低等级玩家 3、玩家等级需要培养,培养需要道具,道具需要看广告/完成任务/付费 4、…...

细说 Java 集合之 Map
前言:本文基于JDK8 一、HashMap 1.1、hash方法 hash方法是map中的基石,后续很多操作都依赖hash方法; 下面是 jdk 7 中 hash方法,注意hashSeed 这个扰动因子,该值随机,所以同一个 key 每次调用hash方法后…...
【vue-echarts】——05.柱状图
文章目录 一、柱状图基本设置1.实现代码2.结果展示二、柱状图效果实现11.代码实现2.结果展示三、柱状图效果实现21.代码实现2.结果展示一、柱状图基本设置 柱状图:一种图表类型,因为构成是由一根一根类似柱子的数据条组合而成的坐标平面,所以命名为柱状 图。主要是用来反应对…...

【C】链式二叉树算法题1 -- 单值二叉树
leetcode链接https://leetcode.cn/problems/univalued-binary-tree/description/ 1 题目描述 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1࿱…...

C++11——智能指针和function库
目录 一、智能指针 1. std::unique_ptr(独占所有权指针) 2. std::shared_ptr(共享所有权指针) 3. std::weak_ptr(弱引用指针) 关键区别总结 最佳实践 基本用法 可封装的对象类型 核心特性 示例代码…...

[操作系统] 文件的软链接和硬链接
文章目录 引言硬链接(Hard Link)什么是硬链接?硬链接的特性硬链接的用途 软链接(Symbolic Link)什么是软链接?软链接的特性软链接的用途 软硬链接对比文件的时间戳实际应用示例使用硬链接节省备份空间用软链…...

RabbitMQ面试题及原理
RabbitMQ使用场景: 异步发送(验证码、短信、邮件…)MYSQL和Redis, ES之间的数据同步分布式事务削峰填谷 1. 消息可靠性(不丢失) 消息丢失场景: RabbitMQ-如何保证消息不丟失? 开启生产者确…...
SpringBoot中Get请求和POST请求接收参数详解
1、Get请求 1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须保持一致 RestController RequestMapping(“/user”) Slf4j public class DemoController { GetMapping("/query") public void getStudent(String name,Strin…...

分布式日志和责任链路
目录 日志问题 责任链问题 分布式日志 GrayLog简介 部署安装 收集日志 配置Inputs 集成微服务 日志回收策略 搜索语法 搜索语法 自定义展示字段 日志统计仪表盘 创建仪表盘 链路追踪 APM 什么是APM 原理 技术选型 Skywalking简介 部署安装 微服务探针 整合…...

h5 IOS端渐变的兼容问题 渐变实现弧形效果
IOS端使用渐变的时候有兼容问题 以下是问题效果,图中黑色部分期望的效果应该是白色的。但是ios端是下面的样子…… 安卓pc 支持: background-image: radial-gradient(circle 40rpx at 100% 0, #f3630c 40rpx, rgb(255, 255, 255) 50%);安卓pc ios支持…...

哈希算法--猜数字游戏
1.题目要求 输入两个位数相同的数,判断对应位置的数字是否相等,返回两个数。第一个数是数字和位置完全猜对的数字个数,第二个数是数字大小猜对但位置不对的数字个数 2.逐步编程 2.1 定义函数 def g(secret,guess):sec_dic{}gue_dic{}# 定义…...

idea生成自定义Maven原型(archetype)项目工程模板
一、什么是Maven原型(Maven archetype) 引自官网的介绍如下: Maven原型插件官网地址 这里采用DeepSeek助手翻译如下: Maven 原型 什么是原型? 简而言之,原型是一个 Maven 项目模板工具包。原型被定义为一…...

Redis面试常见问题——使用场景问题
目录 Redis面试常见问题 如果发生了缓存穿透、击穿、雪崩,该如何解决? 缓存穿透 什么是布隆过滤器? 缓存击穿 缓存雪崩 双写一致性(redis做为缓存,mysql的数据如何与redis进行同步呢?) …...
样式和ui(待更新)
element-plus 先在项目下执行安装语句执行按需导入的命令按照官方文档修改vitest.json sass样式定制 npm -i sass -D在项目下准备定制的样式文件 styles/element/index.scss(!注意这里是.scss文件在vitest.json 修改配置文件 Components({resolvers: [ElementPlusResolver(…...

大摩闭门会:250228 学习总结报告
如果图片分辨率不足,可右键图片在新标签打开图片或者下载末尾源文件进行查看 本文只是针对视频做相应学术记录,进行学习讨论使用...

线程(Thread)
一、概念 线程:线程是一个轻量级的进程 二、线程的创建 1、线程的空间 (1)进程的空间包括:系统数据段、数据段、文本段 (2) 线程位于进程空间内部 (3) 栈区独享、与进程共享文本段、…...
AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命
AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命 ——一场重塑人类认知边界的技术战争 一、OpenAI的“感性觉醒”:GPT-4.5的颠覆与争议 1.1 从“冷面学霸”到“温柔导师”:AI的情商跃迁 当用户输入“朋友放鸽子&…...

DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP
DeepSeek 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…...
Java进阶——常用工具类
日常开发中,Arrays、Collections 和 Objects 是非常实用的工具类,提供了丰富的功能,从而可以更高效地处理数组、集合和对象。本文将详细介绍这三个工具类的重要知识细节。 本文目录 一、 Arrays数组转集合并行排序优化Stream 支持 二、 Colle…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...