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

news2025/3/1 11:48:37

在这里插入图片描述

文章目录

    • 第一章:正则表达式基础概念
      • 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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2307875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chromium项目相关

Chromium项目相关 Chromium 是一个开源浏览器项目&#xff0c;旨在为所有用户构建一种更安全、更快速、更稳定的方式来体验 Web。 自 Google 在 2008 年宣布 Chromium 项目以来&#xff0c;他们一直很高兴能够在开源 Web 浏览器的良好基础上进行构建&#xff0c;并为富 Web 平…

自动驾驶测试场景相关概念

自动驾驶测试场景 一、概念二、分类2.1、按照场景的抽象程度可分为&#xff1a;功能场景、逻辑场景、具体场景。2.2.、​按功能划分2.3、 ​按环境复杂度2.3、按场景类型 三、要素四、挑战与趋势4.1、长尾场景覆盖​4.2、伦理决策测试​4.3、车路协同测试​4.4、联邦学习驱动​…

给小白的oracle优化工具,了解一下

有时懒得分析或语句太长&#xff0c;可以尝试用oracle的dbms_sqldiag包进行sql优化&#xff0c; --How To Use DBMS_SQLDIAG To Diagnose Query Performance Issues (Doc ID 1386802.1) --诊断SQL 性能 SET ECHO ON SET LINESIZE 132 SET PAGESIZE 999 SET LONG 999999 SET SER…

基因型—环境两向表数据分析——品种生态区划分

参考资料&#xff1a;农作物品种试验数据管理与分析 用于品种生态区划分的GGE双标图有两种功能图&#xff1a;试点向量功能图和“谁赢在哪里”功能图。双标图的具体模型基于SD定标和h加权和试点中心化的数据。本例中籽粒产量的GGE双标图仅解释了G和GE总变异的53.6%&#xff0c;…

电路中如何计算电容容值大小

一个例题&#xff1a; 【电路中电容容值是怎么算出来的&#xff1f;】https://www.bilibili.com/video/BV1RQ4y1c7i1?vd_source3cc3c07b09206097d0d8b0aefdf07958

GPT大语言模型与搜索引擎:技术本质与应用场景的深度解析

引言 在人工智能和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型和搜索引擎是两个备受关注的技术。尽管它们都涉及到信息检索和生成&#xff0c;但它们在技术原理、应用场景和用户体验上…

FreeRTOS-中断管理

实验目的 创建一个队列及一个任务&#xff0c;按下按键 KEY1 触发中断&#xff0c;在中断服务函数里向队列里发送数据&#xff0c;任务则阻塞接 收队列数据。 实验代码 实验结果 这样就实现了&#xff0c;使用中断往队列的发送信息&#xff0c;用任务阻塞接收信息

计算机毕业设计SpringBoot+Vue.js音乐网站(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

更换k8s容器运行时环境为docker

更换k8s容器运行时环境为docker k8s-V1.24之后容器运行时默认是containerd&#xff0c;若想改为熟悉的docker作为运行时&#xff0c;需要做以下操作 在每个节点安装containerd、docker; 每个节点安装cri-docker&#xff1b; 调整kubelet配置并重启验证。 1.安装docker、con…

知识图谱-资源网

知识图谱-资源网 http://openkg.cn/datasets-type/https://www.ownthink.com/knowledge.html

小程序Three Dof识别 实现景区AR体验

代码工程 GitCode - 全球开发者的开源社区,开源代码托管平台 dof

2020 年英语(一)考研真题 笔记(更新中)

Section I Use of English&#xff08;完型填空&#xff09; 原题 Directions&#xff1a;Read the following text. Choose the best word (s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) Even if families are less likely to si…

YOLO11改进加入ResNet网络

文章目录 1.改进目的2.demo引入2.1代码2.2 结果展示2.3 BottleNeck详解 1.改进目的 原始YOLO11模型训练好以后&#xff0c;检测结果mAP结果很低&#xff0c;视频检测结果很差&#xff0c;于是想到改进网络&#xff0c;这里介绍改进主干网络。 2.demo引入 2.1代码 # File: 2…

硬编码(三)经典变长指令一

我们在前两节的硬编码中学习了定长指令&#xff0c;接下来学习变长指令 对于定长指令&#xff0c;我们通过opcode便可知该指令的长度&#xff0c;但是对于变长指令却是不可知的。变长指令长度由opcode&#xff0c;ModR/M&#xff0c;SIB共同决定。变长指令通常在需要操作内存的…

在线VS离线TTS(语音合成芯片)有哪些优势-AIOT智能语音产品方案

离线 TTS 存在语音质量欠佳、音色选择有限、语言支持单一更新困难、占用资源多、适应性差、难以个性化定制等痛点 01更新维护困难 由于是离线模式&#xff0c;难以及时获取最新的语音数据和算法更新&#xff0c;无法得到持续改进。 02占用本地资源 需要在设备本地存储较大的…

【Spring Boot】掌握 Spring 事务:隔离级别与传播机制解读与应用

前言 ???本期讲解关于spring 事务传播机制介绍~~~ ??感兴趣的小伙伴看一看小编主页&#xff1a;-CSDN博客 ?? 你的点赞就是小编不断更新的最大动力 ??那么废话不多说直接开整吧~~ 目录 ???1.事务的隔离级别 ??1.1MySQL事务隔离级别 ??1.2Spring事务隔离…

PySide(PyQT)重新定义contextMenuEvent()实现鼠标右键弹出菜单

在 PySide中&#xff0c;contextMenuEvent() 是 QWidget 类&#xff08;以及继承自它的所有子类&#xff09;的一个事件处理方法&#xff0c;主要用于处理上下文菜单事件&#xff0c;也就是当用户在控件上右键点击时触发的事件。 • 通过重新定义contextMenuEvent()来实现自定…

Redis 持久化方式:RDB(Redis Database)和 AOF(Append Only File)

本部分内容是关于博主在学习 Redis 时关于持久化部分的记录&#xff0c;介绍了 RDB 和 AOF 两种持久化方式&#xff0c;详细介绍了持久化的原理、配置、使用方式、优缺点和使用场景。并对两种持久化方式做了对比。文章最后介绍了 Redis 持久化的意义并与其他常见的缓存技术做了…

数据库测试

TPCH 22条SQL语句分析 - xibuhaohao - 博客园 TPCH模型规范、测试说明及22条语句 - zhjh256 - 博客园 TPC-DS 性能比较&#xff1a;TiDB 与 Impala-PingCAP | 平凯星辰 揭秘Oracle TPC-H性能优化&#xff1a;如何提升数据库查询速度&#xff0c;揭秘实战技巧与挑战 引言 T…

< 自用文儿 > Gobuster 暴力扫描工具与 SecLists 安全测试词表集合

Ethice 道德问题 GFW 的保护下&#xff0c;很多的设备操作系统是停留在更老的版本&#xff0c;应用软件也是&#xff0c;因此很多的漏洞没有被修复。通讯没有使用加密&#xff0c;例如网页没有使用 HTTPS 网站很多。几乎是半裸的在网络上等着被食。 不做恶是下限。 环境&…