js:正则表达式常用方法总结test、exec、match、matchAll、replace、replaceAll、search
文章目录
- 正则使用
- test
- match/matchAll
- 不加g
- 加g
- group 的使用
- matchAll
- 不加g
- 加g
- exec
- 不加g
- 加g
- search
- replace
正则使用
常用的几种方法有:test、exec、match、matchAll、replace、replaceAll、search
test
// 匹配返回true,不匹配false
/e/.test("The best things in life are free!")
match/matchAll
不加g
假设有个字符串:
const str = 'abc${a}dfdsd${b}ddd'
我们要获取 {} 里面的值
正则中用小括号包裹起来的为捕获组
'abc${a}dfdsd${b}ddd'.match(/\{(.+?)\}/)

可以看到,这里数组第 0 项为匹配到的值,第 1 项为捕获组。因为正则没加 g,所以只匹配到了第一项。
加g

加 g 之后,确实可以匹配到所有的了,但是不会展示捕获组和其他 group、index 等信息。
group 的使用
在要捕获的里面定义一个变量 ?<var>,返回结果的 groups 字段就会有

matchAll
不加g

加g

返回的是一个迭代器,我们结构一下

可以看到,match 加 g 后无法获取所有的捕获值,而 matchAll 可以
match、matchAll对比:
1.对于match来说,如果正则表达式中有g修饰,结果返回所有与正则表达式匹配的字符串的列表。捕获项会被忽略!
2.对于match来说,如果正则表达式中没有g修饰,结果除了返回第一个匹配外,还会列出其所有捕获项!
3.对于matchAll来说,如果正则表达式有g修饰,其返回的迭代项是一个个的数组,数组中除了包含匹配的完整字符串和所有捕获项外,还包含有index、input、groups这三个属性,index表示当前匹配项在原字符串中的索引位置,input表示输入的原始字符串,groups是一个包含所以分组的对象。
4.对于matchAll来说,如果正则表达式没有g修饰,其结果信息与第3点中描述的完全一致。但其迭代项只有一项,即首个匹配项。
exec
和 match 的返回结果一致
不加g
/\{(.+?)\}/.exec('abc${a}dfdsd${b}ddd')

加g

可以看到和不加g一样,你会说那这个 API 如何进行全局检索?


全局模式下,exec可以多次执行,每次执行返回的结果同match函数。并且会在正则对象下记录 lastIndex 位置,当匹配不上时返回 null 并且 lastIndex 记录为 0。
所以根据这一点我们可以通过遍历来获取我们想要的结果:
// 返回的数组
let m = null;
while((m = reg.exec(str)) != null){// 每次匹配返回的结果console.log(m);// 每次匹配返回的lastIndexconsole.log(reg.lastIndex);
}
// 最终为0
console.log(reg.lastIndex);

search

如果匹配成功,则返回正则表达式在字符串中首次匹配项的索引;否则,返回-1。
不区分全局模式。
replace
// 返回值是新的字符串
const newStr = string.replace(searchvalue,newvalue)
"Mr Blue has a blue house and a blue car".replace(/blue/g, "red");
replace函数的第二个参数newvalue比较特殊,它有一下几个特殊字符串:
$$ 直接量符号(就是当做'$$'字符用)
$& 与正则相匹配的字符串
$` 匹配字符串左边的字符
$’ 匹配字符串右边的字符
$1,$2,$,3,…,$n 匹配结果中对应的分组匹配结果
想要消除$的影响可以写成函数的返回值,函数具有一下几个参数:
- 第一个参数:匹配到的字符串
- 中间的参数:如果正则使用了分组匹配就为多个否则无此参数
- 倒数第二个参数:匹配字符串的对应索引位置
- 最后一个参数:原始字符串
举例
const value = '123-234-234-234'
const pattern = '-'
value.replace(pattern, (item, index) => {// item 替换元素,index 替换元素的下标console.log(item, index)return '/'
})// 输出:
// - 3
// 123/234-234-234
replace和replaceAll的区别?
当第一个参数为字符串时,replace 只替换匹配到的第一个位置,replaceAll 会替换每一个匹配到的地方。
当第一个参数都是正则表达式时,没有区别。
相关文章:
js:正则表达式常用方法总结test、exec、match、matchAll、replace、replaceAll、search
文章目录 正则使用testmatch/matchAll不加g加ggroup 的使用 matchAll不加g加g exec不加g加g searchreplace 正则使用 常用的几种方法有:test、exec、match、matchAll、replace、replaceAll、search test // 匹配返回true,不匹配false /e/.test("…...
分析车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因
车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因 大家有没有注意到车载蓝牙连接后通话的时候只有前喇叭的有声音,后面喇叭没声音呢?特别是后装的车载多媒体上基本都是这样,细思下为什么这样的原因, 采访后装车载技术…...
高性能ADC/DAC FMC子卡推出-FMC164
FMC164 子卡集成 4 通道 1Gsps 采样率,16 位 高性能ADC采样,板载4 通道1.25Gsps 16 位DA。板载时钟芯片 HMC7044,可以提供 JESD204B所需要的各种时钟。具有同步/触发功能,模拟信号采用 SSMC 射频连接器输入和输出。板载时钟芯片为…...
Agisoft Metashape 红外影像处理
系列文章目录 文章目录 系列文章目录前言一、加载红外影像二、对齐照片三、构建 DEM四、生成 DOM五、温度值可视化前言 Agisoft Metashape 专业版支持处理来自 AscTec(ARA 格式)、WIRIS(TIFF 格式)热成像仪和以 R-JPEG(FLIR 数据)格式保存数据的热成像数据。 在本文中,…...
Mybatis从入门到入土
一、什么是Mybatis 1)MyBatis 是一款优秀的持久层(DAO层)框架 2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 3)MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将…...
修为 - 人生感悟
人不为己,天诛地灭。 说明一下,上面说的为己,指的是人的修为。 一个人,在成年之后,需要不断的对自己进行修为的提高。在经历了世事之后,对人生的感悟要不断地进行总结,提高自己的修为。 老祖宗给…...
UnityWebSocket | 双端通信支持Text/Binary
跳转官方仓库地址 有多个项目使用该库,平台有PC、WebGL。 一、说明 1)原理 WebSocket是H5提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。数据通常在两个站(点对点)之间进行传输,按照…...
lazada详情
{“api”: “”, “data”: {“module”: “{“seller”:{“chatResponsiveRate”:{“labelText”:“Chat Response”,“value”:“100%”},“chatUrl”:“https://pages.lazada.com.my/wow/i/my/im/chat?brandId30768”,“hideAllMetrics”:false,“imEnable”:true,“imUser…...
企业为什么要数字化转型?
数字化转型是使用数字技术从根本上改变企业运营方式并为客户创造价值的过程。企业进行数字化转型,常见因素包括: 提高效率:数字化转型可以简化流程并自动执行重复性任务,从而减少执行这些任务所需的时间和精力。可以节省成本并提高…...
Excel 设置只能输入指定的字符
目录 1. 创建你要用的表格 2. 确定你要限定输入的行/ 列 3. 创建另一个sheet,用来保存限制输入的配置信息 4. 选中【是否外包】列,并选择数据验证 5. 设置数据限制 6. 确认结果 7. 不想设置配置sheet怎么办? 在工作中,你们…...
Web开发介绍
Web开发介绍 1 什么是web开发 Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 所以Web开发说白了,就是开发网站的,例如下图所示的网站:淘宝,京东等等 那么我们…...
多语言APP的外包开发流程及注意事项
近些年国内越来越多的公司走向海外,有些互联网项目即可以为国内用户使用,也可以为国外用户使用,尤其是一些智力类小游戏,这些小游戏不需要特别的运营,只要在设计和玩法上把握好,那就可以推广到全球用户。今…...
CMAKE介绍和使用(Windows平台)
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。 Windows平台 cmake工具的下载 cmake工具下载官网: Download | CMake 下载压缩包后解压,解压后的bin文件路径加到电脑系统环境…...
宝塔面板webhook 使用教程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 背景1、介绍一下Webhook2、使用步骤1.安装git2.安装WebHook3.添加WebHook4.配置git 钩子 (码云示例)5.私有项目还需要做以下操作 背景 最近…...
大模型时代入场级技能:提示词工程!中文教程来啦
写出优质的提示词,让 AI 生成惊艳的图文作品。——这就是如今年薪百万仍一人难求的提示词工程师们在解决的问题。大语言模型时代下,不断涌现出众多让人瞳孔地震的绘画、拍案叫绝的文案,它们的创作者并非传统定义的画家、作家,而是…...
template和component自定义组件之间的区别
在小程序中自定义组件 component 方式和组件模板 template 2种方式实现页面组件化。 一、component自定义组件 1.概念 自定义组件是指可以被多个页面使用的组件,可以在小程序中多次复用。在开发中可以将一个页面中的代码和样式抽象出来,然后创建一个自定…...
如何提高读取Excel的效率,NPOI多线程读取详解
如何提高读取Excel的效率 当Excel中的数据量大,达到几十万条,使用Excel文件可能会变得很慢. 以下是一些建议来提高读取Excel的效率: 1. 选择合适的Excel库 在读取Excel文件时, 选择合适的Excel库可以显著提高效率. 一些常用的Excel库包括: EPPlus: 用于读写Excel文件的开源…...
【算法】【算法杂谈】从1到n的自然数组中,1出现的次数如何计算?
目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介…...
日常笔记-Flutter build命令参数
Flutter build命令参数 Flutter build命令参数 Flutter build命令参数 flutter build apk 命令支持以下参数: --debug:构建一个调试版本的 APK。--release:构建一个发布版本的 APK。--target-platform<value>:指定目标平台…...
【利用AI让知识体系化】入门Koa框架
思维导图 文章目录 思维导图一、介绍Koa什么是KoaKoa的历史Koa的特点 二、基本使用安装KoaHello World中间件路由错误处理 三、进阶使用静态资源管理Session管理文件上传表单处理HTTPS支持 四、Koa中间件中间件的概念Koa的洋葱模型常用中间件的介绍自定义中间件的编写 五、异步…...
如何做 Agent Benchmark:任务集设计与可重复实验
如何做 Agent Benchmark:任务集设计与可重复实验 引入与连接:从一个真实的踩坑故事说起 上周我收到一个做ToB AI产品的创业朋友的求助:他们团队花了3个月打磨的电商客服Agent,对外宣称「问题解决率92%,远超行业平均75%」,结果某头部客户拿回去实测,成功率只有68%,直接…...
F12调试必看:如何避免后端返回的长整型ID在前端显示错误(含代码示例)
F12调试实战:精准处理长整型ID的前端显示问题 最近在调试一个电商平台的后台管理系统时,遇到了一个奇怪的现象——商品ID在F12开发者工具的Preview和Response标签页中显示不一致。Response中显示的ID是"914081478893860687",而Prev…...
HC-05蓝牙模块实战:从AT指令到多设备联通的完整指南
1. HC-05蓝牙模块入门:从拆箱到AT指令配置 第一次拿到HC-05蓝牙模块时,很多人会被这个小巧的蓝色电路板难住。这个只有拇指大小的模块,实际上集成了完整的蓝牙2.0EDR通信功能。我刚开始接触时也犯过不少错误,比如把TX和RX接反导致…...
SQL如何检测分组内是否存在满足条件的数据_EXISTS结合分组
用 MAX(CASE WHEN condition THEN 1 ELSE 0 END) 1 判断分组内是否存在符合条件的行最稳妥,避免 EXISTS 在 GROUP BY 中语法错误或逻辑失效,兼容性好且语义清晰。GROUP BY 后怎么判断某组里有没有符合条件的行直接用 HAVING 配合聚合函数最稳妥…...
Qwen2.5-VL-7B-Instruct惊艳效果集:细粒度图像描述+跨模态逻辑推理作品
Qwen2.5-VL-7B-Instruct惊艳效果集:细粒度图像描述跨模态逻辑推理作品 1. 模型能力概览 Qwen2.5-VL-7B-Instruct是一款突破性的多模态视觉-语言模型,在图像理解和跨模态推理方面展现出令人惊艳的能力。这个16GB的BF16模型需要至少16GB显存的GPU支持&am…...
统计学核心概念辨析 —— 从「样本矩」的物理本源到统计应用
1. 从物理杠杆到数据分布:理解「矩」的跨学科本质 第一次接触统计学中的「矩」这个概念时,我也被这个奇怪的术语搞得一头雾水。直到有天在物理实验室摆弄杠杆,突然意识到:这不就是统计学里「矩」的原型吗?物理学中的力…...
用ShaderToy灵感改造Cesium:动态水面效果从创意到落地的完整流程
从ShaderToy到Cesium:动态水面效果的创意移植实战 在三维地理可视化领域,水面效果的真实感直接影响场景的整体表现力。ShaderToy作为全球顶尖的GLSL创意平台,积累了无数令人惊叹的水面着色器,而将这些艺术级效果移植到Cesium这样的…...
Gemma-3-12b-it部署教程:AWQ量化部署与精度损失实测对比
Gemma-3-12b-it部署教程:AWQ量化部署与精度损失实测对比 想体验Google最新的多模态大模型Gemma-3-12b-it,却被它动辄24GB的显存需求劝退?别担心,今天我们就来手把手教你如何通过AWQ量化技术,在消费级显卡上轻松部署这…...
好写作AI:博士论文“第二大脑”已上线,你离“知识原创者”只差这一步
朋友们好,我是你们的老朋友。 今天咱们聊一个博士圈里不太公开的话题——为什么有人三年顺顺当当,有人六年还在原地打转? 我认识的一位博四女生,上周深夜发了条朋友圈:“博士论文写作最大的幻觉,就是以为…...
AI Agent开发实战系列 - LangGraph(8): 构建基于状态路由的动态决策图
1. 动态决策图的核心价值 想象一下你正在设计一个智能客服系统。当用户输入"我的订单怎么还没到?"时,系统需要自动识别这是物流查询问题,然后路由到物流处理模块;而当用户说"我要投诉产品质量"时,…...
