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):又称规则表达式,在代码中常简写为regexregexpRE 。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。

读了半天,还是懵,说的什么东东?

其实就一句话:在JavaScript中,就是用来进行字符串匹配的,进行搜索、获取、替代字符串

1.1 怎么定义正则

那么,怎么定义正则呢?有两种方式来定义正则:

  1. 对象字面量方式(常用)
  2. 使用类RegExp创建

正则有两部分构成:模式、和修饰符。

1.2 对象字面量方式

  • 这里面xxx:为模式
  • ig:为修饰符
// 对象字面量方式创建正则
const regexp = /xxx/ig

1.3 类创建方式

  • 使用RegExp 类来创建
const regexp = new RegExp("xxx", "ig")

2. 怎么使用

有了正则表达式之后,我们要如何使用它呢? 在JavaScript中,主要用于以下两个场景:

  1. RegExp的实例方法:exec、和 test 方法
  2. 字符串的方法:match/matchAllreplace/replaceAllsearchsplit 方法。

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 捕获组

  1. 模式的一部分可以用括号括起来(.),这称为“捕获组。这有两个作用:
  • 它允许将匹配的一部分作为结果数组中的单独项,
  • 它将括号视为一个整体;
  1. 命名组:
  • 用数字索引记录组很困难。
  • 对于更复杂的模式,计算括号很不方便。我们有一个更好的选择:给括号起个名字。
  • 这是通过在开始括号之后立即放置?<name>来完成的。
  1. 非捕获组:
  • 有时我们需要括号才能正确应用量词,但我们不希望它们的内容出现在结果中
  • 可以通过在开头添加 ?:来排除组。
  • 在正则表达式中,它用竖线|表示,
  • 通常会和捕获组一起来使用,在其中表示多个值
  • [aeo]的区别:中括号是单个字符

3.8 贪婪模式和惰性模式

默认情况下的匹配规则:是查找到匹配的内容后,会继续向后查找,一直找到最后一个匹配的内容

  • 这种匹配的方式,我们称之为贪婪模式

懒性模式中的量词与贪婪模式中的是相反的。

  • 只要获取到对应的内容后,就不再继续向后匹配
  • 我们可以在量词后面再加一个问号?来启用它
  • 所以匹配模式变为 *?+?,甚至将?变为 ??

END !

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

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

相关文章

大模型LLM-Prompt-OPTIMAL

1 OPTIMAL OPTIMAL 具体每项内容解释如下&#xff1a; Objective Clarity&#xff08;目标清晰&#xff09;&#xff1a;明确定义任务的最终目标和预期成果。 Purpose Definition&#xff08;目的定义&#xff09;&#xff1a;阐述任务的目的和它的重要性。 Information Gat…

78、使用爱芯派2_AX630C开发板 3.2T高有效算力 低功耗 支持AI-ISP真黑光实验

基本思想:使用爱心元智最新的版本开发板进行实验 AX630C、AX620Q 都是 620E 这一代 一、参考这个官方教程,先把代码在本地交叉编译完成 https://github.com/AXERA-TECH/ax620e_bsp_sdk 然后在拷贝到620c设备上 root@ax630c:~/ax620e_bsp_sdk/msp/out/arm64_glibc/bin# ./…

C语言 扫雷程序设计

目录 1.main函数 2.菜单打印menu函数 3.游戏game函数 4.宏定义 5.界面初始化 6.打印界面 7.设置雷 8.统计排查坐标周围雷的个数 9.排查雷 10.总代码 test.c代码 game.h代码 game.c代码 结语&#xff1a; 一个简单的扫雷游戏&#xff0c;通过宏定义可以修改行列的…

《高速公路警察模拟器》

一个引人入胜的警察故事在等着你&#xff0c;你可以选择扮演男警官或女警官。公路警察模拟器》拥有休闲和模拟两种游戏模式&#xff0c;将两个世界的精华结合在一起&#xff1a;在身临其境的虚拟环境中自由驾驶和行走&#xff0c;在故事驱动的游戏中解决各种令人兴奋的案件。探…

EasyGBS小知识:如何确保摄像机的网络连接稳定?

在当今数字化时代&#xff0c;视频监控系统已成为保障安全和提高效率的重要工具。然而&#xff0c;摄像机的网络连接稳定性直接关系到监控系统的可靠性和有效性。为了确保视频监控系统能够持续稳定地运行&#xff0c;我们需要从硬件、网络设置、软件与监控以及安装与维护等多个…

微服务-Eureka

Eureka的作用 使用RestTemplate完成远程调用需要被调用者的ip和端口&#xff0c;从而能够发起http请求&#xff0c;但是如果有很多个实例也更加不能有效的处理&#xff0c;而且我们又该如何知道这些实例是否健康呢。所以就有了很多的注册中心比如Eureka、Nacos等等。 服务注…

LabVIEW软件侵权分析与应对

问&#xff1a;如果涉及到LabVIEW软件的仿制或模仿&#xff0c;特别是在功能、界面等方面&#xff0c;如何判断是否构成侵权&#xff1f;该如何应对&#xff1f; 答&#xff1a;LabVIEW软件的侵权问题&#xff0c;尤其是在涉及到仿制或模仿其功能、界面、设计等方面&#xff0…

MATLAB仿真:基于GS算法的经大气湍流畸变涡旋光束波前校正仿真

GS算法流程 GS&#xff08;Gerchberg-Saxton&#xff09;相位恢复算法是一种基于傅里叶变换的最速下降算法&#xff0c;可以通过输出平面和输入平面上光束的光强分布计算出光束的相位分布。图1是基于GS算法的涡旋光束畸变波前校正系统框图&#xff0c;在该框图中&#xff0c;已…

数树数(中等难度)

题目&#xff1a; 解题代码&#xff1a; n,qmap(int,input().split())#分别输入层数和路径数量 for i in range(q):sinput()#输入“L”或“R”x1for j in s:if j "L":xx*2-1 #&#xff01;&#xff01;&#xff01;规律else:xx*2print(x)

高效内存管理与调试技巧:深入解析 AddressSanitizer

在现代 C开发中&#xff0c;内存管理是一个至关重要但也容易出错的领域。即使使用了智能指针和其他高效工具&#xff0c;复杂的项目仍可能出现内存泄漏、非法访问等问题。为了解决这些问题&#xff0c;Google 开发了一个强大的工具——AddressSanitizer (ASan)。本文将详细介绍…

Vue3 内置组件之Teleport

文章目录 Vue3 内置组件之Teleport概述用法 Vue3 内置组件之Teleport 概述 Teleport 中文翻译为“瞬间移动”&#xff0c;顾名思义&#xff0c;在Vue3 中 <Teleport> 组件可以将组件中内容移动到指定的目标元素上。 用法 <script setup> import {ref} from &qu…

【我的 PWN 学习手札】IO_FILE 之 FSOP

FSOP&#xff1a;File Stream Oriented Programming 通过劫持 _IO_list_all 指向伪造的 _IO_FILE_plus&#xff0c;进而调用fake IO_FILE 结构体对象中被伪造的vtable指向的恶意函数。 目录 前言 一、glibc-exit函数浅析 二、FSOP 三、Largebin attack FSOP &#xff08;…

函数指针的用法

函數指標一些相關的用法和注意事項。以下將詳細說明&#xff1a; 1. 基本寫法: 這是最常見且明確的寫法&#xff0c;尤其在處理重載函數時非常有用。 void (GirlFriend::*girl2)(QString) &GirlFriend::hungry;void: 指標所指向的函數的回傳型別。(GirlFriend::*): 表示…

DDcGAN_多分辨率图像融合的双鉴别条件生成对抗网络_y译文马佳义

摘要&#xff1a; 在本文中&#xff0c;我们提出了一种新的端到端模型&#xff0c;称为双鉴别条件生成对抗网络&#xff08;DDcGAN&#xff09;&#xff0c;用于融合不同分辨率的红外和可见光图像。我们的方法建立了一个生成器和两个鉴别器之间的对抗博弈。生成器的目的是基于特…

springboot配置线程池

直接上代码 配置 定义一个配置类 创建一个springboot能扫描到的地方创建一个线程池配置类 配置信息 package com.example.demonew.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import or…

【君正T31开发记录】12.编译工具相关总结及介绍

移植交叉工具包的时候&#xff0c;发现这是很多工具的集合包&#xff1b;以及写makefile的时候&#xff0c;也需要了解下这些工具的作用及用法&#xff0c;这里总结记录一下常见的工具及相关用法。 g C编译器&#xff0c;用于编译C源代码文件&#xff0c;这个很常见&#xff0…

如何让面向应急管理的多智能体具备自主决策能力

现代应急管理面对的是复杂、多变、跨部门的灾害与事故场景——从自然灾害&#xff08;洪水、地震、台风、火灾&#xff09;到公共安全事件&#xff08;疫情、重大安全事故&#xff09;&#xff0c;都需要在极短时间内进行快速响应和全局协同。传统的集中式指挥模式虽然有效&…

List-顺序表--2

目录 1、ArrayList 2、ArrayList构造方法 3、ArrayList常见方法 4、ArrayList的遍历 5、ArrayList的扩容机制 6、ArrayList的具体使用 6.1、杨辉三角 6.2、简单的洗牌算法 1、ArrayList 在集合框架中&#xff0c;ArrayList 是一个普通的类&#xff0c;实现了 List 接口…

lambda用法及其原理

目录 lambda形式lambda用法1.sort降序2.swap3.捕捉列表 习题解题 lambda形式 [capture-list](parameters)->return type{function boby}[capture-list]&#xff1a;[捕捉列表]用于捕捉函数外的参数&#xff0c;可以为空&#xff0c;但不能省略&#xff1b;(parameters) &am…

基于ASP.NET的动漫网站

一、系统架构与技术实现 系统架构&#xff1a;基于ASP.NET的MVC框架构建&#xff0c;实现网站的层次结构&#xff0c;使得网站更加易于维护和扩展。 技术实现&#xff1a;利用ASP.NET的技术特点&#xff0c;如强大的后端开发能力、丰富的UI控件等&#xff0c;结合前端技术如HT…