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

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 正则使用 常用的几种方法有&#xff1a;test、exec、match、matchAll、replace、replaceAll、search test // 匹配返回true&#xff0c;不匹配false /e/.test("…...

分析车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因

车载蓝牙通话只有前喇叭声音&#xff0c;后面喇叭无声背后原因 大家有没有注意到车载蓝牙连接后通话的时候只有前喇叭的有声音&#xff0c;后面喇叭没声音呢&#xff1f;特别是后装的车载多媒体上基本都是这样&#xff0c;细思下为什么这样的原因&#xff0c; 采访后装车载技术…...

高性能ADC/DAC FMC子卡推出-FMC164

FMC164 子卡集成 4 通道 1Gsps 采样率&#xff0c;16 位 高性能ADC采样&#xff0c;板载4 通道1.25Gsps 16 位DA。板载时钟芯片 HMC7044&#xff0c;可以提供 JESD204B所需要的各种时钟。具有同步/触发功能&#xff0c;模拟信号采用 SSMC 射频连接器输入和输出。板载时钟芯片为…...

Agisoft Metashape 红外影像处理

系列文章目录 文章目录 系列文章目录前言一、加载红外影像二、对齐照片三、构建 DEM四、生成 DOM五、温度值可视化前言 Agisoft Metashape 专业版支持处理来自 AscTec(ARA 格式)、WIRIS(TIFF 格式)热成像仪和以 R-JPEG(FLIR 数据)格式保存数据的热成像数据。 在本文中,…...

Mybatis从入门到入土

一、什么是Mybatis 1&#xff09;MyBatis 是一款优秀的持久层&#xff08;DAO层&#xff09;框架 2&#xff09;MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 3&#xff09;MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将…...

修为 - 人生感悟

人不为己&#xff0c;天诛地灭。 说明一下&#xff0c;上面说的为己&#xff0c;指的是人的修为。 一个人&#xff0c;在成年之后&#xff0c;需要不断的对自己进行修为的提高。在经历了世事之后&#xff0c;对人生的感悟要不断地进行总结&#xff0c;提高自己的修为。 老祖宗给…...

UnityWebSocket | 双端通信支持Text/Binary

跳转官方仓库地址 有多个项目使用该库&#xff0c;平台有PC、WebGL。 一、说明 1&#xff09;原理 WebSocket是H5提供的一种浏览器与服务器进行全双工通讯的网络技术&#xff0c;属于应用层协议。数据通常在两个站&#xff08;点对点&#xff09;之间进行传输&#xff0c;按照…...

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…...

企业为什么要数字化转型?

数字化转型是使用数字技术从根本上改变企业运营方式并为客户创造价值的过程。企业进行数字化转型&#xff0c;常见因素包括&#xff1a; 提高效率&#xff1a;数字化转型可以简化流程并自动执行重复性任务&#xff0c;从而减少执行这些任务所需的时间和精力。可以节省成本并提高…...

Excel 设置只能输入指定的字符

目录 1. 创建你要用的表格 2. 确定你要限定输入的行/ 列 3. 创建另一个sheet&#xff0c;用来保存限制输入的配置信息 4. 选中【是否外包】列&#xff0c;并选择数据验证 5. 设置数据限制 6. 确认结果 7. 不想设置配置sheet怎么办&#xff1f; 在工作中&#xff0c;你们…...

Web开发介绍

Web开发介绍 1 什么是web开发 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站。 所以Web开发说白了&#xff0c;就是开发网站的&#xff0c;例如下图所示的网站&#xff1a;淘宝&#xff0c;京东等等 那么我们…...

多语言APP的外包开发流程及注意事项

近些年国内越来越多的公司走向海外&#xff0c;有些互联网项目即可以为国内用户使用&#xff0c;也可以为国外用户使用&#xff0c;尤其是一些智力类小游戏&#xff0c;这些小游戏不需要特别的运营&#xff0c;只要在设计和玩法上把握好&#xff0c;那就可以推广到全球用户。今…...

CMAKE介绍和使用(Windows平台)

CMake是一个跨平台的安装&#xff08;编译&#xff09;工具&#xff0c;可以用简单的语句来描述所有平台的安装(编译过程)。 Windows平台 cmake工具的下载 cmake工具下载官网&#xff1a; Download | CMake 下载压缩包后解压&#xff0c;解压后的bin文件路径加到电脑系统环境…...

宝塔面板webhook 使用教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 背景1、介绍一下Webhook2、使用步骤1.安装git2.安装WebHook3.添加WebHook4.配置git 钩子 &#xff08;码云示例&#xff09;5.私有项目还需要做以下操作 背景 最近…...

大模型时代入场级技能:提示词工程!中文教程来啦

写出优质的提示词&#xff0c;让 AI 生成惊艳的图文作品。——这就是如今年薪百万仍一人难求的提示词工程师们在解决的问题。大语言模型时代下&#xff0c;不断涌现出众多让人瞳孔地震的绘画、拍案叫绝的文案&#xff0c;它们的创作者并非传统定义的画家、作家&#xff0c;而是…...

template和component自定义组件之间的区别

在小程序中自定义组件 component 方式和组件模板 template 2种方式实现页面组件化。 一、component自定义组件 1.概念 自定义组件是指可以被多个页面使用的组件&#xff0c;可以在小程序中多次复用。在开发中可以将一个页面中的代码和样式抽象出来&#xff0c;然后创建一个自定…...

如何提高读取Excel的效率,NPOI多线程读取详解

如何提高读取Excel的效率 当Excel中的数据量大,达到几十万条,使用Excel文件可能会变得很慢. 以下是一些建议来提高读取Excel的效率: 1. 选择合适的Excel库 在读取Excel文件时, 选择合适的Excel库可以显著提高效率. 一些常用的Excel库包括: EPPlus: 用于读写Excel文件的开源…...

【算法】【算法杂谈】从1到n的自然数组中,1出现的次数如何计算?

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…...

日常笔记-Flutter build命令参数

Flutter build命令参数 Flutter build命令参数 Flutter build命令参数 flutter build apk 命令支持以下参数&#xff1a; --debug&#xff1a;构建一个调试版本的 APK。--release&#xff1a;构建一个发布版本的 APK。--target-platform<value>&#xff1a;指定目标平台…...

【利用AI让知识体系化】入门Koa框架

思维导图 文章目录 思维导图一、介绍Koa什么是KoaKoa的历史Koa的特点 二、基本使用安装KoaHello World中间件路由错误处理 三、进阶使用静态资源管理Session管理文件上传表单处理HTTPS支持 四、Koa中间件中间件的概念Koa的洋葱模型常用中间件的介绍自定义中间件的编写 五、异步…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

手动给中文分词和 直接用神经网络RNN做有什么区别

手动分词和基于神经网络&#xff08;如 RNN&#xff09;的自动分词在原理、实现方式和效果上有显著差异&#xff0c;以下是核心对比&#xff1a; 1. 实现原理对比 对比维度手动分词&#xff08;规则 / 词典驱动&#xff09;神经网络 RNN 分词&#xff08;数据驱动&#xff09…...

Java设计模式:责任链模式

一、什么是责任链模式&#xff1f; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 是一种 行为型设计模式&#xff0c;它通过将请求沿着一条处理链传递&#xff0c;直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者&#xff0c;…...

MeanFlow:何凯明新作,单步去噪图像生成新SOTA

1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架&#xff0c;旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念&#xff0c;这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换&#xff0c;显…...

Spring Boot 与 Kafka 的深度集成实践(二)

3. 生产者实现 3.1 生产者配置 在 Spring Boot 项目中&#xff0c;配置 Kafka 生产者主要是配置生产者工厂&#xff08;ProducerFactory&#xff09;和 KafkaTemplate 。生产者工厂负责创建 Kafka 生产者实例&#xff0c;而 KafkaTemplate 则是用于发送消息的核心组件&#x…...

【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南

文章目录 &#x1f4cc; 前言&#x1f9f0; 一、前期准备✅ 安装 Kali Linux✅ 获取支持监听模式的无线网卡 &#x1f6e0; 二、使用 Kali Linux 进行 WiFi 安全测试步骤 1&#xff1a;插入无线网卡并确认识别步骤 2&#xff1a;开启监听模式步骤 3&#xff1a;扫描附近的 WiFi…...