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

【Java 进阶篇】JavaScript 正则表达式(RegExp)详解

在这里插入图片描述

JavaScript 正则表达式,通常简写为 RegExp,是一种强大的文本匹配工具,它允许你通过一种灵活的语法来查找和替换字符串中的文本。正则表达式在编程中用途广泛,不仅限于 JavaScript,在许多编程语言中也都有类似的实现。

什么是正则表达式

正则表达式,简称正则或RegExp,是一个用于描述字符模式的对象。这个模式可以用来匹配字符串中的字符,用于查找、替换、切割或验证字符串。正则表达式是一种强大的工具,可用于执行各种文本处理任务。

在正则表达式中,你可以指定要匹配的文本模式,这些文本模式可以包括普通字符(例如字母、数字、符号)、特殊字符和元字符。正则表达式的模式可以非常简单,如匹配一个固定的单词,也可以非常复杂,如匹配一个复杂的文本结构。

正则表达式的语法和模式

正则表达式的模式是由各种字符组成的,这些字符可以用来描述文本模式。下面是一些正则表达式中常用的字符和元字符:

  • 普通字符:表示自身的字符,如字母、数字、符号等。
  • 特殊字符:具有特殊含义的字符,如.*+?等。
  • 元字符:具有特殊功能的字符,如^$|()[]{}等。
  • 量词:用于指定重复次数的字符,如*+?{n}{n,}{n,m}等。

正则表达式的模式用于描述你要查找或匹配的文本,这个模式可以包含上述各种字符,并通过组合它们来构建更复杂的匹配规则。

创建正则表达式

在 JavaScript 中,你可以使用两种方式来创建正则表达式对象:

  1. 字面量方式:使用两个正斜杠(/)包围正则表达式模式。

    var pattern = /hello/;
    
  2. 构造函数方式:使用 RegExp 构造函数来创建正则表达式对象。

    var pattern = new RegExp("hello");
    

这两种方式都会创建一个表示 hello 文本模式的正则表达式对象。

正则表达式的匹配方法

JavaScript 提供了一些方法来执行正则表达式的匹配操作,最常用的方法是:

  • test() 方法:测试字符串是否匹配正则表达式,返回布尔值。

    var pattern = /hello/;
    var text = "hello, world!";
    var isMatch = pattern.test(text); // true
    
  • exec() 方法:在字符串中查找匹配的文本,返回一个数组,包含匹配的文本和匹配的索引。

    var pattern = /lo/g;
    var text = "hello, world!";
    var result = pattern.exec(text);
    // result 包含匹配的文本和索引
    
  • match() 方法:在字符串中查找匹配的文本,返回一个数组,包含所有匹配的文本。

    var pattern = /lo/g;
    var text = "hello, world!";
    var result = text.match(pattern);
    // result 包含所有匹配的文本
    
  • search() 方法:在字符串中查找匹配的文本,返回匹配的第一个字符的索引。

    var pattern = /lo/;
    var text = "hello, world!";
    var index = text.search(pattern); // 3
    
  • replace() 方法:替换字符串中的匹配文本。

    var pattern = /lo/g;
    var text = "hello, world!";
    var newText = text.replace(pattern, "Hi");
    // newText 包含替换后的字符串
    

这些方法都接受一个正则表达式作为参数,并在字符串中执行匹配操作。

正则表达式的修饰符

正则表达式可以使用修饰符来修改匹配行为。JavaScript 中的修饰符包括:

  • i 修饰符:执行不区分大小写的匹配。

    var pattern = /hello/i;
    var text = "Hello, world!";
    var isMatch = pattern.test(text); // true
    
  • g 修饰符:执行全局匹配,匹配所有出现的文本。

    var pattern = /lo/g;
    var text = "hello, world!";
    var result = text.match(pattern); // 包含所有匹配的文本
    
  • m 修饰符:执行多行匹配,用于匹配多行文本。

    var pattern = /^hello/m;
    var text = "hello, world!\nHello, universe!";
    var isMatch = pattern.test(text); // true
    

正则表达式中的特殊字符

正则表达式中有一些特殊字符,它们具有特殊含义,用于构建复杂的匹配规则。以下是一些常见的特殊字符:

  • .:匹配除换行符之外的任何字符。

  • *:匹配前一个元素零次或多次。例如,a* 可以匹配空字符串、aaaaaa 等。

  • +:匹配前一个元素一次或多次。例如,a+ 可以匹配aaaaaa 等,但不能匹配空字符串。

  • ?:匹配前一个元素零次或一次。例如,a? 可以匹配空字符串或a

  • ^:匹配字符串的开头。

  • $:匹配字符串的结尾。

  • |:表示逻辑或,用于分隔多个模式。

  • ():用于捕获分组,可以将匹配的文本保存到变量中。

  • []:用于创建字符类,匹配其中的任何一个字符。

  • {}:用于指定重复次数,例如{n}{n,}{n,m}

正则表达式的常见用例

正则表达式在文本处理中有许多常见的用例,以下是一些示例:

  1. 验证邮箱地址:使用正则表达式验证输入的邮箱地址是否合法。

  2. 提取链接:从文本中提取所有链接的URL。

  3. 查找和替换:在文本中查找特定的模式并进行替换。

  4. 校验日期格式:检查日期字符串是否符合指定的日期格式。

  5. 数据清洗:清洗数据中的不规范字符或格式。

高级正则表达式技巧

正则表达式的应用非常广泛,以下是一些高级技巧和示例:

  1. 使用捕获分组:捕获分组可以将匹配的文本保存到变量中,然后进行进一步处理。

    var pattern = /(\d{2})-(\d{2})-(\d{4})/;
    var text = "30-09-2023";
    var result = pattern.exec(text);
    var day = result[1]; // 30
    var month = result[2]; // 09
    var year = result[3]; // 2023
    
  2. 零宽断言:零宽断言是一种高级技巧,用于匹配符合特定条件的文本,但不包括断言文本本身。

    // 匹配后面跟着 "world" 的 "hello"
    var pattern = /hello(?= world)/;
    var text = "hello world";
    var result = pattern.test(text); // true
    
  3. 非捕获分组:使用 ?: 语法来创建非捕获分组,匹配文本但不捕获到变量中。

    var pattern = /(?:Mr|Ms|Mrs) (\w+)/;
    var text = "Mr Smith";
    var result = pattern.exec(text);
    var name = result[1]; // Smith
    
  4. 反向引用:在正则表达式中可以使用反向引用,引用之前匹配的文本。

    var pattern = /(\w+) is \1/;
    var text = "apple is apple";
    var result = pattern.test(text); // true
    
  5. 嵌入修饰符:正则表达式可以嵌入修饰符,灵活地应用不同的匹配规则。

    var pattern = /hello/i; // 不区分大小写
    var text = "Hello";
    var result = pattern.test(text); // true
    

在 JavaScript 中使用正则表达式

在 JavaScript 中,正则表达式是内置的对象,可以使用正则表达式字面量或构造函数来创建正则表达式对象。例如:

var pattern = /hello/;
var pattern = new RegExp("hello");

然后,你可以使用正则表达式的方法来执行匹配操作,如test()exec()match()search()replace()

下面是一个示例,演示如何使用正则表达式验证邮箱地址:

var emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
var email = "user@example.com";
if (emailPattern.test(email)) {console.log("Valid email address");
} else {console.log("Invalid email address");
}

这将输出 “Valid email address”,因为 email 符合邮箱地址的正则表达式模式。

总结

JavaScript 正则表达式是一种强大的文本匹配工具,它可以用于执行各种文本处理任务,包括验证、查找、替换和切割文本。在本篇博客中,我们深入探讨了正则表达式的基础知识、语法和常见用例,还介绍了一些高级技巧。

学会使用正则表达式可以极大地提高文本处理的效率,因此建议深入学习和实践正则表达式的用法,以便更好地处理文本数据。希望本文能帮助你更好地理解和使用 JavaScript 正则表达式。如果你有更多问题或需要进一步的帮助,请随时提问。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

相关文章:

【Java 进阶篇】JavaScript 正则表达式(RegExp)详解

JavaScript 正则表达式,通常简写为 RegExp,是一种强大的文本匹配工具,它允许你通过一种灵活的语法来查找和替换字符串中的文本。正则表达式在编程中用途广泛,不仅限于 JavaScript,在许多编程语言中也都有类似的实现。 …...

51单片机之串口通信例程

51单片机之串口通信例程 简介原理例程 简介 串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。在串行通信中,数据可以以字符为单位进行传输,也可以以帧为单位进行传输。 在51单片机中&a…...

Hadoop高可用集群(HA)一键启动脚本

高可用集群启动时,需要分别在每个节点上都执行zkServer.sh start启动zookeeper,这个过程比较麻烦,并且当我们节点增多时,这个过程无疑不增加了我们的工作量,因此我们可以写一个一键启动所有节点zookeeper的脚本 脚本实…...

C#开发的OpenRA游戏之金钱系统(1)

C#开发的OpenRA游戏之金钱系统(1) 设计一个游戏,肯定要有一个唯一的资源,用这个资源来管理整个游戏的进度,以及相互争夺的焦点。在OpenRA里,就是使用矿产资源。所以在地图上分布几个矿场,玩家就需要相互争夺矿场,谁开采多谁就更有钱,谁有钱了就可以升级更好的科技,以…...

Puppeteer监听网络请求、爬取网页图片(二)

Puppeteer监听网络请求、爬取网页图片(二) Puppeteer监听网络请求、爬取网页图片(二)一、爬取需求二、实现讲解三、效果查看 一、爬取需求 首先打开浏览器,打开指定网站监听网站发出的所有请求,记录请求&a…...

GoLang连接mysql数据库

跟着文档走GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 1.使用命令拉取 go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite2.开始使用 package mainimport ("fmt""github.com/gin-gonic/gin"&…...

软件工程与计算总结(八)软件设计基础

一.设计思想的发展 1958:软件这个名词第一次在公开刊物上使用~60年代中后期and70年代前中期:结构化编程、逐步求精、自顶向下理念是程序设计主要方法70年代中后期and90年代:结构化设计方法、抽象数据类型、信息隐藏、封装、继承、多态等思想…...

someip 入门

什么是someip? SomeIP(Scalable Service-Oriented MiddlewarE over IP)是一种基于以太网的通信协议,用于汽车领域的通信。它允许不同的汽车电子控制单元(ECUs)之间通过网络进行通信,以便在车辆内…...

C# 使用Parallel去执行并行下载

直接上代码&#xff1a; //最大线程下载数量ParallelOptions options new ParallelOptions{MaxDegreeOfParallelism 5};public async Task DownloadMusicUrl(List<MusicTags> musicTags){DateTime currentTime DateTime.Now;DateTime startTime new DateTime(1970, 1…...

@Component 和 @Bean的区别

Component 和 Bean 是Spring框架中用于管理和配置依赖注入的关键注解&#xff0c;用于定义和管理Spring应用程序中的组件。 Component: Component 是一种泛用型的Spring注解&#xff0c;用于标识一个类为Spring组件。Spring会自动扫描所有带有Component 注解的类&#xff0c;并…...

百度测试开发工程师面试心得

百度测试开发实习生面试心得&#xff1a; 电话面试&#xff1a; 面试官&#xff1a;首先做一下自我介绍吧 我&#xff1a;我是***&#xff0c;来自什么大学&#xff0c;现在大三&#xff0c;在学校期间担任过部长&#xff0c;副主席等职务&#xff0c; 组织举办了很多比赛&…...

发现更多美景!XnViewMP for Mac/Windows 图片浏览软件

想要轻松快捷地浏览、管理和编辑您的照片吗&#xff1f;XnViewMP for Mac 是您的最佳选择&#xff01;这款强大而多功能的图片浏览软件将给您带来全新的视觉体验。 借助 XnViewMP&#xff0c;您可以方便地浏览各种图片格式&#xff0c;包括JPEG、PNG、GIF等&#xff0c;并支持…...

城市广告牌安全传感器特点有哪些?

城市广告牌安全传感器特点有哪些&#xff1f; 在现代快节奏的都市生活中&#xff0c;城市的广告牌成为不可或缺的一部分&#xff0c;以各种形式和大小存在于城市的街头巷尾&#xff0c;商业中心和交通要道。广告牌是城市生命线组成的一部分。但是由于天气因素、材料老化、不当维…...

源码部署lamt架构

源码部署lamt架构 lamt由apache&#xff0c;mysql&#xff0c;tomcat三者组成 文章目录 源码部署lamt架构1.准备工作1.1.配置yum源&#xff0c;关闭防火墙和selinux1.2.拉取相应源码包 2.安装apache3.安装mariadb4.安装tomcat 1.准备工作 1.1.配置yum源&#xff0c;关闭防火墙…...

【Java 进阶篇】JavaScript Math对象详解

在JavaScript编程中&#xff0c;Math对象是一个非常有用的工具&#xff0c;用于执行各种数学运算。它提供了许多数学函数和常数&#xff0c;可以用于处理数字、执行几何运算、生成随机数等。在本篇博客中&#xff0c;我们将深入探讨JavaScript中Math对象的各种功能和用法。 什…...

geecg-uniapp 路由修改 页面创建 (2)

一&#xff0c;增加页面 添加路由 &#xff08;1&#xff09;我们以home的常用服务 当作示例 我们修改 usList 数据 &#xff08;2&#xff09;查找对应路径 work.js 目前荒石对应的路径跳转 helloword 我们修改成 huang &#xff08;3&#xff09;修改跳转路径 修…...

微信开发者工具下载

一、微信开发者工具下载官网 微信开发者工具下载地址与更新日志 | 微信开放文档 (qq.com) 二、微信开发者工具界面 下载安装好后&#xff0c;软件图标如下图所示。 运行软件如下图所示&#xff0c;这时候就需要使用你的管理员账号扫码登录。 登陆后的界面&#xff0c;如下图…...

ctfshow萌新计划web9-14(正则匹配绕过)

目录 web9 web10 web11 web12 web13 web14 web9 审一下代码&#xff0c;需要匹配到system|exec|highlight才会执行eval函数 先看一下当前目录下有什么 payload&#xff1a;?csystem(ls); index.php是首页&#xff0c;我们看看config.php payload&#xff1a;?csystem…...

【数据结构】单链表按位序插入元素e【前插】(带头结点的和不带头结点的)这篇很重要,文字说明比起其他篇是正确的

声明单链表的结构体成员 struct LNode {int data;struct LNode *next; };typedef struct LNode LNode;// 或者: 两者是等价的 typedef struct LNode {int data;struct LNode *next; }LNode;按位序插入元素e&#xff1a;就是在第i个位置插入新结点&#xff0c;数据域为e 以下带…...

Maven Surefire Exclude 无效问题排查日志

昨天有个需求,要在单元测试的时候单线程执行,并且只执行单元测试类特殊结尾的,那么根据以往经验,直接在maven里面配置exclude并且指定include即可。如下尝试 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin&…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...