2025第1周 | JavaScript中的正则表达式
目录
- 1. 正则表达式是个什么东东?
- 1.1 怎么定义正则
- 1.2 对象字面量方式
- 1.3 类创建方式
- 2. 怎么使用
- 2.1 实例方法
- 2.1.1 exec方法
- 2.1.2 test方法
- 2.2 字符串中的方法
- 2.2.1 match/matchAll
- 2.2.2 replace/replaceAll
- 2.2.3 split
- 2.2.4 search
- 3. 规则
- 3.1 修饰符
- 3.2 字符类
- 3.3 锚点(Anchors)
- 3.4 转义字符串
- 3.5 集合(Sets)和范围(Ranges)
- 3.6 量词
- 3.7 捕获组
- 3.8 贪婪模式和惰性模式
2025,做想做的事,读想读的书,持续学习,自律生活,修行人生。
2025一个转身就已到来,对于时间太快,总会有种惶恐感。每每回首过去,总会发现想要做的事情没有完成,学习的内容少之又少,读的有用的书籍更是可以忽略不计。对于内在的超越,内在的修行也是没有始终践行,知行合一,实践、认识、再实践、再认识…
2025年第1周:2025.01.01 ~ 2025.01.05
目标:JavaScript中的正则表达式,您搞懂了么?这部分内容,不需要深入了了解,但是基本的概念和用法需要掌握。
- 正则表达式是个什么东东?
- 怎么使用?
- 规则有哪些
1. 正则表达式是个什么东东?
我们看一下百度百科上的解释:
正则表达式(
Regular Expression):又称规则表达式,在代码中常简写为regex、regexp或RE。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。
读了半天,还是懵,说的什么东东?
其实就一句话:在JavaScript中,就是用来进行字符串匹配的,进行搜索、获取、替代字符串。
1.1 怎么定义正则
那么,怎么定义正则呢?有两种方式来定义正则:
- 对象字面量方式(常用)
- 使用类
RegExp创建
正则有两部分构成:模式、和修饰符。
1.2 对象字面量方式
- 这里面
xxx:为模式 ig:为修饰符
// 对象字面量方式创建正则
const regexp = /xxx/ig
1.3 类创建方式
- 使用
RegExp类来创建
const regexp = new RegExp("xxx", "ig")
2. 怎么使用
有了正则表达式之后,我们要如何使用它呢? 在JavaScript中,主要用于以下两个场景:
- 类
RegExp的实例方法:exec、和test方法 - 字符串的方法:
match/matchAll、replace/replaceAll、search、split方法。
2.1 实例方法
2.1.1 exec方法
- exec方法:使用正则,执行一个字符串。
const re1 = /qtz/ig;
const message = "welcom to qtz";const result = re1.exec(message);
console.log(result);// [ 'qtz', index: 10, input: 'welcom to qtz', groups: undefined ]
2.1.2 test方法
test方法:检测某一个字符串是否符合正则的规则。返回boolean类型。
const regexp = /qtz/ig
const str = "welcome to qtz"
if (regexp.test(str)) {console.log("匹配到了qtz")
}
2.2 字符串中的方法
2.2.1 match/matchAll
- 注意:
matchAll传入的正则修饰符,必须加g,否则会报如下错误:
Uncaught TypeError: String.prototype.matchAll called with a non-global RegExp argument
matchAll返回值:得到是一个迭代器对象(RegExpStringIterator{})
const re = /qtz/ig;
const message = "Qtz and qtz or qtz";const result = message.matchAll(re);console.log(result.next());
console.log(result.next());
console.log(result.next());
2.2.2 replace/replaceAll
- 替换字符串
const re1 = /qtz/ig;
const message = "Qtz and qtz or qtz";const result = message.replace(re1, "AAA");
console.log(result); // AAA and AAA or AAA
2.2.3 split
- 字符串分割
const reg = /qtz/ig;
const message = "Qtz and qtz or qtz";const result = message.split(reg);
console.log(result); // [ '', ' and ', ' or ', '' ]
2.2.4 search
- 查找字符串
const reg = /qtz/i;
const message = "HH Qtz and qtz or qtz";const result = message.search(reg);
console.log(result); // 3
3. 规则
3.1 修饰符
- g:全局,匹配所有
- i:忽略大小写
- m:多行匹配
3.2 字符类
字符类(Character classes)是一个特殊的符号,匹配特定集中的任何符号:
- \d :数字从0到9的字符
- \s:空格符号,包括空格、制表符
\t、换行符\n和其他少数稀有字符,例如\v、\f和\r。 - \w:'单字"字符,拉丁字母、数字、下划线-。相当于
[ a-zA-Z0-9_ ] - .(点):点
.是一种特殊字符类,它与“除换行符之外的任何字符”匹配.
反向类(Inverse classes)
- \D 非数字:除 \d 以外的任何字符,例如字母,
- \S 非空格符号:除\s 以外的任何字符,例如字母。
- \W 非单字字符:除 \w 以外的任何字符,例如非拉丁字母或空格,
3.3 锚点(Anchors)
符号^和符号 $ 在正则表达式中具有特殊的意义,它们被称为“锚点”。
- 符号
^匹配文本开头; - 符号
$匹配文本末尾,
词边界(Word boundary)
- 词边界
\b是一种检査,就像^和$一样,它会检査字符串中的位置是否是词边界。 - 词边界测试
\b检査位置的一侧是否匹配 \w,而另一侧则不匹配“\w“
3.4 转义字符串
如果要把特殊字符作为常规字符来使用,需要对其进行转义
- 只需要在它前面加个反斜杠
\
常见的需要转义的字符:
[ ] \ ^ $ . | ? * + ( )
- 斜杠符号
/并不是一个特殊符号,但是在字面量正则表达式中也需要转义;
const re = /\//
3.5 集合(Sets)和范围(Ranges)
有时候我们只要选择多个匹配字符的其中之一就可以:
- 在方括号
[...]中的几个字符或者字符类意味着“搜索给定的字符中的任意一个”.
集合(Sets)
- 比如说,
[eao]意味着查找在3个字符’a’、'e’或者、'o’中的任意一个;
范围(Ranges):方括号也可以包含字符范围
- 比如说,
[a-z]会匹配从 a到z范围内的字母,[0-5]表示从05的数字; [0-9A-F]表示两个范围:它搜索一个字符,满足数字 0 到 9 或字母 A 到 F- \d :和
[0-9]相同; - \w:和
[a-zA-Z0-9_]相同;
3.6 量词
用来形容我们所需要的数量的词被称为量词(quantifiers)。
数量 {n}
- 确切的位数:
{5} - 某个范围的位数:
{3,5}注意,号后面不能有空格
简写:
+:代表“一个或多个”,相当于{1,}?:代表“零个或一个”,相当于(0,1}。换句话说,它使得符号变得可选;*:代表着“零个或多个”,相当于{0,}。也就是说,这个字符可以多次出现或不出现;
3.7 捕获组
- 模式的一部分可以用括号括起来
(.),这称为“捕获组。这有两个作用:
- 它允许将匹配的一部分作为结果数组中的单独项,
- 它将括号视为一个整体;
- 命名组:
- 用数字索引记录组很困难。
- 对于更复杂的模式,计算括号很不方便。我们有一个更好的选择:给括号起个名字。
- 这是通过在开始括号之后立即放置
?<name>来完成的。
- 非捕获组:
- 有时我们需要括号才能正确应用量词,但我们不希望它们的内容出现在结果中。
- 可以通过在开头添加
?:来排除组。
- 或
- 在正则表达式中,它用竖线
|表示, - 通常会和捕获组一起来使用,在其中表示多个值
- 与
[aeo]的区别:中括号是单个字符
3.8 贪婪模式和惰性模式
默认情况下的匹配规则:是查找到匹配的内容后,会继续向后查找,一直找到最后一个匹配的内容
- 这种匹配的方式,我们称之为贪婪模式
懒性模式中的量词与贪婪模式中的是相反的。
- 只要获取到对应的内容后,就不再继续向后匹配
- 我们可以在量词后面再加一个问号
?来启用它 - 所以匹配模式变为
*?或+?,甚至将?变为??
END !
相关文章:
2025第1周 | JavaScript中的正则表达式
目录 1. 正则表达式是个什么东东?1.1 怎么定义正则1.2 对象字面量方式1.3 类创建方式 2. 怎么使用2.1 实例方法2.1.1 exec方法2.1.2 test方法 2.2 字符串中的方法2.2.1 match/matchAll2.2.2 replace/replaceAll2.2.3 split2.2.4 search 3. 规则3.1 修饰符3.2 字符类…...
基于 Python Django 的西西家居全屋定制系统(源码+部署+文档)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【Leetcode 热题 100】74. 搜索二维矩阵
问题背景 给你一个满足下述两条属性的 m n m \times n mn 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 t a r g e t target target,如果 t a r g e t target target 在矩阵中&…...
讯方技术入库深圳市第一批建设培育产教融合型企业
产教融合是指产业与教育的紧密结合,是现代职业教育体系的重要组成部分。通过企业与学校之间的合作,使学生在学校所学的知识和技能能够更好地满足企业和社会的实际需求,同时也为企业提供高素质的技术人才,促进产业升级和经济发展。…...
阿里云代理商热销产品推荐
在数字化浪潮的推动下,企业对于云计算的依赖日益加深。阿里云,作为中国领先的云计算服务提供商,为企业提供了丰富多样的云产品和服务。本文将聚焦于阿里云代理商热销产品推荐,探讨其如何帮助企业高效利用云资源,加速数…...
海外云服务器能用来做什么?
海外云服务器不仅服务种类繁多,而且能满足多行业的需求,方便了越来越多的企业与个人。本文将探讨海外云服务器的核心服务及其适用领域,帮助企业更好地了解这一技术资源。 云存储:安全高效的数据管理 海外云服务器为用户提供了稳定…...
LeetCode 704 如何正确书写一个二分查找
题目链接 中文版:https://leetcode.cn/problems/binary-search/description/ 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标…...
基于springboot+vue的餐饮连锁店管理系统的设计与实现
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
transfomer深度学习实战水果识别
本文采用RT-DETR作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。RT-DETR以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对水果数据集进行训练和优化,该数据集包含丰富的水果图像样本&#…...
【CPU】堆栈和堆栈指针(个人草稿)
详细的 CPU 中堆栈指针(Stack Pointer, SP)及相关知识介绍 1. 什么是堆栈? 堆栈(Stack) 是一种后进先出(LIFO, Last In First Out)的数据结构,广泛用于计算机系统中,尤…...
BMS应用软件开发 — 2 单体电池的基本结构和工作原理
目录 1 单体电池基本组成 2 单体电池封装形式 3 电池充放电过程 4 不同电池材料性能差异 1 单体电池基本组成 单体电池其基本组成包括以下几个关键部分: 正极:正极材料通常由锂的金属氧化物构成,如锂钴氧化物(LiCoO2…...
uni-app开发-习惯养成小程序/app介绍
目录 一:功能概述 二:功能部分代码和截图 一:功能概述 1 习惯目标生成 创建习惯:用户可以添加新的习惯目标,每个习惯可以包含名称、描述、图标、目标天数。 关联习惯完成:用户通过设定达成目标以后,生成习惯养成记录。 2 习惯打卡 简单快捷的打卡:提供一个直观的界面…...
鸿蒙HarmonyOS开发:拨打电话、短信服务、网络搜索、蜂窝数据、SIM卡管理、observer订阅管理
文章目录 一、call模块(拨打电话)1、使用makeCall拨打电话2、获取当前通话状态3、判断是否存在通话4、检查当前设备是否具备语音通话能力 二、sms模块(短信服务)1、创建短信2、发送短信 三、radio模块(网络搜索&#x…...
Netty中用了哪些设计模式?
大家好,我是锋哥。今天分享关于【Netty中用了哪些设计模式?】面试题。希望对大家有帮助; Netty中用了哪些设计模式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 是一个高性能的网络通信框架,广泛…...
Mac 安装psycopg2出错:Error:pg_config executable not found的解决
在mac 上执行pip3 install psycopg2-binary出现如下错误: Error:pg_config executable not found然后我又到终端里执行 brew install postgresql16 显示 Warning: You are using macOS 15. We do not provide support for this pre-release version. It is expe…...
【vue3封装element-plus的反馈组件el-drawer、el-dialog】
vue2中封装el-drawer、el-dialog这类反馈类子组件,需要将父组件的visible值传递子组件,并且再通过$emit将关闭弹窗的组件值传回父组件,同事子组件还需要监听父组件传递过来的visible的值,来驱动弹窗显示隐藏,很麻烦&am…...
LeetCode:2274. 不含特殊楼层的最大连续楼层数(排序 Java)
目录 2274. 不含特殊楼层的最大连续楼层数 题目描述: 实现代与解析: 排序 原理思路: 2274. 不含特殊楼层的最大连续楼层数 题目描述: Alice 管理着一家公司,并租用大楼的部分楼层作为办公空间。Alice 决定将一些…...
生成树之STP
STP目的 STP:生成树协议,旨在将一个环型网络结构修剪成一个树型的结构,达到防环的作用 STP的步骤 STP有如下几个步骤,选举出四种角色,共同构建起STP生成树 1、开启生成树的交换机,会互相发送BPDU 2、交换…...
音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现
一、引言 通过FFmpeg命令可以获取到PS文件/PS流的视频压缩编码格式、色彩格式(像素格式)、分辨率、帧率信息: ./ffmpeg -i XXX.ps 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 (…...
深入解析HDFS:定义、架构、原理、应用场景及常用命令
引言 Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)是Hadoop框架的核心组件之一,它提供了高可靠性、高可用性和高吞吐量的大规模数据存储和管理能力。本文将从HDFS的定义、架构、工作原理、应用场景以及常用命令等…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
