正则表达式:元字符

一、什么事元字符

正则是由一系列的元字符组成的,所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,元字符是构成正则表达式的基本元件。

在这里插入图片描述

二、元字符的分类

1.特殊单字符

表达式含义
\d匹配任意一个数字
\D匹配任意非数字
\w匹配任意一个字母、数字或下划线
\W匹配匹配任意一个非字母、数字或下划线
\s匹配任意一个空白字符(空格、制表符、换行符等)
\S匹配任意一个非空白字符

在这里插入图片描述
效果:

①.任意字符(换行符除外):

在这里插入图片描述
②\d 任意数字:

在这里插入图片描述
③\D 任意非数字:

在这里插入图片描述
其它特殊字符的效果可以查看:https://regex101.com/r/PnzZ4k/1

2.空白符在这里插入图片描述

注:关于换行符,Windows 里是 \r\n,在 Linux 和 MacOS 中是 \n。

在这里插入图片描述
可以看到, \s 能匹配上空格、Tab、换行等各种空白符号。

3.量词

量词含义
*匹配前面的元素零次或多次
+匹配前面的元素一次或多次
?匹配前面的元素零次或一次
{n}匹配前面的元素恰好 n 次
{n,}匹配前面的元素至少 n 次
{n,m}匹配前面的元素至少 n 次,但不超过 m 次

在这里插入图片描述

4.范围

在这里插入图片描述
其中:
① 管道符号( 多选分支):|,它用来隔开多个正则,表示满足其中任意一个就可以。比如,ac|bc 能匹配上 ac,也能匹配上 bc。
②多选一符号:[],只要满足里面的任意单个字符就可以,所以要匹配0~9的数字,可以使用:[0123456789]。另外,中括号中,我们还可以用中划线表示范围,比如 [0-9](等价于[0123456789]),同理[a-z] 可以表示所有小写字母。如果中括号第一个是脱字符(^),那么就表示非,表达的是不能是里面的任何单个元素。

5.边界

表达式含义
^匹配输入的开始
$匹配输入的结束
\b匹配一个单词边界(即字与空白间的位置)
\B匹配非单词边界的位置

6.修饰符

修饰符:可选,用于指定匹配的方式。常见的修饰符包括:

修饰符含义
g全局匹配,找到所有的匹配项而不仅仅是第一个
i忽略大小写,不区分大小写地匹配
m多行匹配,将 ^$ 匹配行的开始和结束,而不仅仅是整个字符串的开始和结束

7.分组与引用

在JavaScript中,正则表达式中的分组和引用可以通过括号来实现。分组可以将正则表达式中的一部分内容视为一个整体,并对其进行操作。通过使用括号将需要分组的内容括起来,我们可以创建一个分组。分组可以用于多种用途,包括匹配、替换和提取信息。

分组基本语法:使用小括号 () 来创建一个分组。分组可以包含一个或多个字符,用于表示一个特定的模式。例如,(abc) 表示一个由字符 “abc” 组成的模式。

分组可以用来对一部分模式进行分组,而引用可以用来引用分组中匹配到的内容(在正则表达式中,正则本身里引用分组,但只能引用之前出现的分组,即反向引用)。

例如,正则表达式 /(ab)+/ 中的 (ab) 就是一个分组,表示匹配连续出现的 “ab”。而在正则表达式中可以使用 \N(N为正整数),如:用\1、\2 等来引用分组中匹配到的内容。例如,正则表达式 /(ab)+\1/ 中的 \1 就是引用分组中匹配到的内容,表示与第一个分组匹配到的内容相同。

以下是简单的示例:

var re = /(\w+)\s(\w+)/;
var str = "Hello World";
var match = re.exec(str);
console.log(match[0]); // "Hello World",整个匹配的内容
console.log(match[1]); // "Hello",第一个分组匹配的内容
console.log(match[2]); // "World",第二个分组匹配的内容
var reg = /(ab)+cd\1/
reg.test('ab13123ab') // false
reg.test('abcdab') // true

字符串replace函数中的分组引用:$N

比如,想把yyyy-mm-dd格式,替换成mm/dd/yyyy怎么做?

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2021-05-16";
var result = string.replace(regex, "$2/$3/$1");
console.log(result);// => "05/16/2021"

其中replace中的,第二个参数里用$1、$2、$3指代相应的分组。等价于如下的形式:

var regex = /(\d{4})-(\d{2})-(\d{2})/;var string = "2021-05-16";var result = string.replace(regex, function() {return RegExp.$2 + "/" + RegExp.$3 + "/" + RegExp.$1;});console.log(result);// => "05/16/2021"

非捕获分组

之前出现的分组,都会捕获它们匹配到的数据,以便后续引用,因此也称他们是捕获型分组。

如果只想要括号最原始的功能,但不会引用它,即:既不在API里引用,也不在正则里反向引用。此时可以使用非捕获分组(?:p),例如:

var regex = /(?:ab)+/g;
var string = "ababa abbb ababab";
console.log( string.match(regex) );// => ["abab", "ab", "ababab"]

7.断言

在JavaScript中,正则断言是一种正则表达式的高级功能,用于在匹配过程中进行条件判断。它允许你在不消耗字符的情况下,对字符串中的特定位置进行匹配。

关于这部分内容,我们在后续的《正则表达式:断言》中展开。

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

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

相关文章

面试经典150题(50-53)

leetcode 150道题 计划花两个月时候刷完,今天(第二十二天)完成了4道(50-53)150: 50.(141. 环形链表)题目描述: 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个…

算法练习Day20 (Leetcode/Python-回溯算法)

虽然看似进入了一个新章节,但其实还是前几天二叉树章节的延续。。 回溯算法 (以下内容摘抄自代码随想录): 回溯法解决的问题都可以抽象为树形结构,是的,我指的是所有回溯法的问题都可以抽象为树形结构&…

云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)

目录 一、理论 1.K8S集群升级 2.环境 3.升级集群(v1.23.14) 4.验证集群(v1.23.14) 二、实验 1. 环境 2.升级集群(v1.23.14) 2.验证集群(v1.23.14) 一、理论 1.K8S集群升级 …

详解视频美颜SDK:算法优化与性能提升

众所周知,视频美颜SDK的算法优化和性能提升至关重要。下文小编将与大家深度探讨视频美颜SDK的算法原理,以及近期的性能优化措施。 一、常见用法 视频美颜SDK对人脸进行识别,并附加适当的美颜效果。例如: 1.识别、关键点 2.肤色…

modbus-tcp-rtu协议图表

MODBUS TCP 读寄存器 请求 序号 意义 所占字节 字节存放格式 1 事务处理标识 2个字节 高字节在前 2 协议标识 2个字节 高字节在前 3 长度 2个字节 高字节在前 4 单元标识 1个字节 0x00-0xff 5 功能码 1个字节 0x03 6 起始寄存器地址 2个字节 高字节…

flutter项目从创建到运行,以及一些常用的命令

# 创建项目 命令行 flutter create flutter_app (这种vsCode软件可用) 按下ctrlshiftp, 输入 Flutter: New Project 选择 Application 选择项目存放位置 输入项目名字 点击 enter 完成创建 # 运行项目 1、命令行中运行: cd flutte…

GLES学习笔记---OpenGL绘制到ImageReader

一、ImageReader简介 ImageReader 之前经常使用在camera应用里面,创建一个ImageReader,然后获取surface,配流和下发request时候将surface下发给framework,中间具体对ImageReader做了什么没有具体研究过,等到Hal层came…

MYSQL数据库的备份与恢复-数据库实验七

一、实验目的 1. 了解备份和恢复的基本概念。 2. 掌握使用MySQL命令进行数据库备份的操作方法。 3. 掌握使用MySQL命令进行数据库恢复的操作方法。 二、实验内容 1. 使用mysqldump命令备份数据库studentsdb的所有表,存于D:\下,文件名为all_tables.s…

C#与php自定义数据流传输

C#与php自定义数据流传输 介绍一、客户端与服务器数据传输流程图客户端发送数据给服务器:服务器返回数据给客户端: 二、自定义数据流C#版本数据流PHP版本数据流 三、数据传输测试1.在Unity中创建一个C#脚本NetWorkManager.cs2.服务器www目录创建StreamTe…

Java基础知识:单元测试和调试技巧

在Java编程中,单元测试和调试是提高代码质量和开发效率的重要环节。通过单元测试,我们可以验证代码的正确性,而调试则帮助我们找出并修复代码中的错误。本文将介绍Java中的单元测试和调试技巧,并提供相关示例代码,帮助…

华清远见嵌入式学习——ARM——作业4

作业要求&#xff1a; 代码运行效果图&#xff1a; 代码&#xff1a; do_irq.c: #include "key_it.h" extern void printf(const char *fmt, ...); unsigned int i 0;//延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j);} }void do_i…

基于AR+地图导航的景区智慧导览设计

随着科技的飞速发展&#xff0c;智慧旅游已经成为现代旅游业的一个重要趋势。在这个背景下&#xff0c;景区智慧导览作为智慧旅游的核心组成部分&#xff0c;正逐渐受到越来越多游客的青睐。本文将深入探讨地图导航软件在景区智慧导览中的应用&#xff0c;并分析其为游客和景区…

【JavaWeb学习笔记】18 - 文件上传下载

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/fileupdown 目录 文件上传 一、基本介绍 二、文件上传的基本原理 ​编辑 三、文件上传应用实例 四、文件上传的注意细节 1.解决中文乱码问题 2.分割文件夹 3.防止重名 4.百度WebUploader 5.空…

redis 从0到1完整学习 (七):ZipList 数据结构

文章目录 1. 引言2. redis 源码下载3. zipList 数据结构3.1 整体3.2 entry 数据结构分析3.3 连锁更新 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&am…

常用API:Object

Object Object类的作用&#xff1a; Object类是Java中所有类的祖宗类&#xff0c;因此&#xff0c;Java中所有的对象都可以直接使用Object类中提供的一些方法。 Object类的常见方法 方法名说明public String toString&#xff08;&#xff09;返回对象的字符串表示形式publi…

Vue 3 表单处理精讲:打造响应式注册表单的艺术

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃诸葛妙计&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &…

kubernetes -pod 实践

一、资源与对象 1、pod 容器都是由镜像启动的,但在容器外面会包裹通过Pod将容器包裹起来这个是K8s的概念,在这个Pod里面可以有一个或多个容器,那这个Pod的有什么特征呢 Pod里的所有容器都会调度在同一个节点上运行0。Pod中的所有容器会共享同一网络,它们有一个唯一的IP,…

PDF编辑工具--Acrobat Pro DC 2023中文

Acrobat Pro DC 2023是一款功能强大的PDF编辑和管理软件&#xff0c;它可以帮助用户在创建、编辑、转换和共享PDF文档方面达到前所未有的高度。这款软件提供了丰富的编辑功能&#xff0c;使用户能够轻松添加注释、高亮、下划线、插入文本等&#xff0c;自由地编辑PDF文档。除了…

LeetCode 每日一题 Day 23 || 简单数学题

1276. 不浪费原料的汉堡制作方案 圣诞活动预热开始啦&#xff0c;汉堡店推出了全新的汉堡套餐。为了避免浪费原料&#xff0c;请你帮他们制定合适的制作计划。 给你两个整数tomatoSlices和 cheeseSlices&#xff0c;分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下&am…

枚举的使用

背景以及定义 枚举是在jdk1.5以后引入的.主要用途是:将常量组织起来,在这之前表示一组常量通常使用定义常量的方式: public static final int RED 1; public static final int GREEN 2; public static final int BLUE 3; 但是常量举例有不好的地方,例如:可能碰巧有一个数字…