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的定义、架构、工作原理、应用场景以及常用命令等…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
