当前位置: 首页 > news >正文

前端正则表达式完全指南:从入门到实战

在这里插入图片描述

文章目录

    • 第一章:正则表达式基础概念
      • 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 在线测试工具

  1. RegExr:实时高亮测试
  2. 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})/

六、注意事项

  1. 正则表达式需要根据具体业务需求调整
  2. 注意转义字符处理(如.需写成\.
  3. 性能优化:避免过度复杂的正则
  4. 兼容性处理:部分新特性(如命名捕获组)需考虑浏览器支持
  5. 安全性:避免正则表达式拒绝服务攻击(ReDoS)

完整代码示例可参考以下GitHub仓库:
https://github.com/example/regex-collection

在线测试工具推荐

  • Regex101
  • RegExr

可根据实际需求组合修改这些正则表达式,建议先使用在线工具验证匹配效果。
在这里插入图片描述

相关文章:

前端正则表达式完全指南:从入门到实战

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

【SRC实战】小游戏漏洞强制挑战

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

细说 Java 集合之 Map

前言&#xff1a;本文基于JDK8 一、HashMap 1.1、hash方法 hash方法是map中的基石&#xff0c;后续很多操作都依赖hash方法&#xff1b; 下面是 jdk 7 中 hash方法&#xff0c;注意hashSeed 这个扰动因子&#xff0c;该值随机&#xff0c;所以同一个 key 每次调用hash方法后…...

【vue-echarts】——05.柱状图

文章目录 一、柱状图基本设置1.实现代码2.结果展示二、柱状图效果实现11.代码实现2.结果展示三、柱状图效果实现21.代码实现2.结果展示一、柱状图基本设置 柱状图:一种图表类型,因为构成是由一根一根类似柱子的数据条组合而成的坐标平面,所以命名为柱状 图。主要是用来反应对…...

【C】链式二叉树算法题1 -- 单值二叉树

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

C++11——智能指针和function库

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

[操作系统] 文件的软链接和硬链接

文章目录 引言硬链接&#xff08;Hard Link&#xff09;什么是硬链接&#xff1f;硬链接的特性硬链接的用途 软链接&#xff08;Symbolic Link&#xff09;什么是软链接&#xff1f;软链接的特性软链接的用途 软硬链接对比文件的时间戳实际应用示例使用硬链接节省备份空间用软链…...

RabbitMQ面试题及原理

RabbitMQ使用场景&#xff1a; 异步发送&#xff08;验证码、短信、邮件…&#xff09;MYSQL和Redis, ES之间的数据同步分布式事务削峰填谷 1. 消息可靠性&#xff08;不丢失&#xff09; 消息丢失场景&#xff1a; RabbitMQ-如何保证消息不丟失&#xff1f; 开启生产者确…...

SpringBoot中Get请求和POST请求接收参数详解

1、Get请求 1.1 方法形参接收参数 这种方式一般适用参数比较少的情况&#xff0c;并且前后端参数名称必须保持一致 RestController RequestMapping(“/user”) Slf4j public class DemoController { GetMapping("/query") public void getStudent(String name,Strin…...

分布式日志和责任链路

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

h5 IOS端渐变的兼容问题 渐变实现弧形效果

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

哈希算法--猜数字游戏

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

idea生成自定义Maven原型(archetype)项目工程模板

一、什么是Maven原型&#xff08;Maven archetype&#xff09; 引自官网的介绍如下&#xff1a; Maven原型插件官网地址 这里采用DeepSeek助手翻译如下&#xff1a; Maven 原型 什么是原型&#xff1f; 简而言之&#xff0c;原型是一个 Maven 项目模板工具包。原型被定义为一…...

Redis面试常见问题——使用场景问题

目录 Redis面试常见问题 如果发生了缓存穿透、击穿、雪崩&#xff0c;该如何解决&#xff1f; 缓存穿透 什么是布隆过滤器&#xff1f; 缓存击穿 缓存雪崩 双写一致性&#xff08;redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&#xff1f;&#xff09; …...

样式和ui(待更新)

element-plus 先在项目下执行安装语句执行按需导入的命令按照官方文档修改vitest.json sass样式定制 npm -i sass -D在项目下准备定制的样式文件 styles/element/index.scss(!注意这里是.scss文件在vitest.json 修改配置文件 Components({resolvers: [ElementPlusResolver(…...

大摩闭门会:250228 学习总结报告

如果图片分辨率不足&#xff0c;可右键图片在新标签打开图片或者下载末尾源文件进行查看 本文只是针对视频做相应学术记录&#xff0c;进行学习讨论使用...

线程(Thread)

一、概念 线程&#xff1a;线程是一个轻量级的进程 二、线程的创建 1、线程的空间 &#xff08;1&#xff09;进程的空间包括&#xff1a;系统数据段、数据段、文本段 &#xff08;2&#xff09; 线程位于进程空间内部 &#xff08;3&#xff09; 栈区独享、与进程共享文本段、…...

AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命

AI军备竞赛2025&#xff1a;GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命 ——一场重塑人类认知边界的技术战争 一、OpenAI的“感性觉醒”&#xff1a;GPT-4.5的颠覆与争议 1.1 从“冷面学霸”到“温柔导师”&#xff1a;AI的情商跃迁 当用户输入“朋友放鸽子&…...

DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP

DeepSeek 自由职业 发现新大陆&#xff0c;从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…...

Java进阶——常用工具类

日常开发中&#xff0c;Arrays、Collections 和 Objects 是非常实用的工具类&#xff0c;提供了丰富的功能&#xff0c;从而可以更高效地处理数组、集合和对象。本文将详细介绍这三个工具类的重要知识细节。 本文目录 一、 Arrays数组转集合并行排序优化Stream 支持 二、 Colle…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...