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

JavaScript语言的正则表达式

JavaScript语言的正则表达式详解

正则表达式(Regular Expression,简称Regex或RegExp)是一种强大的文本处理工具,可以在字符串中执行模式匹配和替换操作。在JavaScript中,正则表达式是处理字符串时不可或缺的部分,它为开发者提供了灵活的字符串操作能力。

本文将对JavaScript中的正则表达式进行深入解析,包括基本概念、语法、常用方法和实际应用,帮助读者全面理解正则表达式的使用。

一、正则表达式基础

1.1 什么是正则表达式?

正则表达式是一种用于描述字符串模式的工具,它由普通字符(如字母和数字)和特殊字符(称为元字符)组成。正则表达式可以用来验证字符串是否符合某种特定的模式,提取字符串中的信息,或对字符串进行替换和修改等操作。

1.2 创建正则表达式

在JavaScript中,可以用两种方式创建正则表达式:

  1. 字面量方式: javascript const regex = /pattern/flags;

  2. 构造函数方式: javascript const regex = new RegExp('pattern', 'flags');

  3. pattern:表示要匹配的文本模式。

  4. flags:可选的标志,控制正则表达式的匹配方式(如区分大小写、全局匹配等)。

1.3 正则表达式的基本语法

字符
  • .:匹配除换行符以外的任何单个字符。
  • \d:匹配任何数字,等同于[0-9]
  • \D:匹配任何非数字字符。
  • \w:匹配任何字母数字字符以及下划线,等同于[a-zA-Z0-9_]
  • \W:匹配任何非字母数字字符。
  • \s:匹配任何空白字符(包括空格、制表符、换行符等)。
  • \S:匹配任何非空白字符。
量词
  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • {n}:匹配前面的子表达式恰好 n 次。
  • {n,}:匹配前面的子表达式至少 n 次。
  • {n,m}:匹配前面的子表达式至少 n 次,但不超过 m 次。
边界匹配
  • ^:匹配输入字符串的开始。
  • $:匹配输入字符串的结束。
  • \b:匹配单词边界。
  • \B:匹配非单词边界。
分组与选择
  • (abc):匹配括号内的内容,并记住匹配的字符。
  • |:表示“或”的选择。 例如,abc|def可以匹配abcdef

1.4 常见的标志

  • g:全局匹配(忽略^$)。
  • i:忽略大小写。
  • m:多行匹配,^$分别匹配每一行的开始和结束。

二、正则表达式的方法

JavaScript中,正则表达式对象具有多种方法,可以用于搜索和操作字符串。

2.1 test() 方法

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

javascript const regex = /hello/i; console.log(regex.test('Hello World')); // true

2.2 exec() 方法

exec()方法用于在字符串中执行搜索,并返回匹配结果。如果没有匹配,则返回null

javascript const regex = /(\w+)\s(\w+)/; const result = regex.exec('Hello World'); console.log(result); // ["Hello World", "Hello", "World"]

2.3 match() 方法

String.prototype.match()方法用于检索字符串中指定的值,并返回一个数组。

javascript const str = 'Hello World'; const regex = /o/g; const result = str.match(regex); // ["o", "o"] console.log(result);

2.4 replace() 方法

String.prototype.replace()方法用于替换字符串中匹配正则表达式的部分。

javascript const str = 'Hello World'; const regex = /World/; const newStr = str.replace(regex, 'JavaScript'); console.log(newStr); // Hello JavaScript

2.5 split() 方法

String.prototype.split()方法用于根据匹配正则表达式将字符串分割成数组。

javascript const str = 'apple,banana,orange'; const regex = /,/; const fruits = str.split(regex); console.log(fruits); // ["apple", "banana", "orange"]

三、正则表达式的高级用法

3.1 捕获组与非捕获组

捕获组用括号()表示,可以用于提取匹配的文本。如果只想分组,而不需要捕获,可以使用非捕获组(?:...)

javascript const regex = /(?:\d{4})-(\d{2})-(\d{2})/; const result = regex.exec('2023-10-01'); console.log(result[1]); // 10

3.2 前瞻与后顾

前瞻(lookahead)和后顾(lookbehind)是用于定义一个匹配的条件,而不包括在结果中。

  • 前瞻:(?=...),表示后面跟着特定的模式。
  • 后顾:(?<=...),表示前面有特定的模式。

javascript const regex = /\d(?=px)/; console.log('20px'.match(regex)); // ["2"]

3.3 现代JavaScript中的正则表达式增强

在现代JavaScript中,正则表达式支持一些新的特性,如u(Unicode)标志和y(粘连)标志。

  • u使正则表达式支持Unicode字符集。
  • y用于表示“粘连”模式,保证搜索从字符串的特定位置开始。

javascript const regex = /u/uy; const str = 'uUuuuu'; console.log(regex.exec(str)); // ["u"]

四、正则表达式的常见应用场景

4.1 验证输入格式

正则表达式常用于验证用户输入的格式,如邮箱、手机号等。

javascript // 验证邮箱 const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; console.log(emailRegex.test('example@example.com')); // true

4.2 数据清洗

在处理数据时,可以使用正则表达式对字符串进行清洗,去除多余的空格、格式错误的字符等。

javascript const messyString = ' Hello World '; const cleanedString = messyString.replace(/\s+/g, ' ').trim(); console.log(cleanedString); // "Hello World"

4.3 解析日志文件

正则表达式也常用于解析日志文件,从中提取出特定的信息。

javascript const log = 'Error: [2023-10-01] - Something went wrong'; const regex = /\[(.*?)\]/; const date = log.match(regex)[1]; console.log(date); // "2023-10-01"

五、总结

正则表达式在JavaScript中是一个非常强大的工具,能够帮助开发者快捷地进行字符串处理。尽管起初学习和理解正则表达式可能略显复杂,但通过反复实践,掌握其基本语法和常用方法会使得我们的代码更加简洁和高效。

希望通过本文的介绍,读者能够对JavaScript中的正则表达式有一个全面的认识,并能够在实际开发中灵活运用正则表达式。

相关文章:

JavaScript语言的正则表达式

JavaScript语言的正则表达式详解 正则表达式&#xff08;Regular Expression&#xff0c;简称Regex或RegExp&#xff09;是一种强大的文本处理工具&#xff0c;可以在字符串中执行模式匹配和替换操作。在JavaScript中&#xff0c;正则表达式是处理字符串时不可或缺的部分&…...

R语言的编程范式

R语言的编程范式探讨 引言 R语言作为一种专门用于统计分析和数据可视化的编程语言&#xff0c;近年来得到了广泛的应用。无论是在学术研究、企业分析&#xff0c;还是在数据科学的各个领域&#xff0c;R语言凭借其强大的数据处理能力和丰富的图形化工具&#xff0c;吸引了大批…...

CentOS9 安装Docker+Dpanel+onlyoffice(https、更改字体、字号、去除限制)的避坑笔记

CentOS9 安装Dockeronlyoffice&#xff08;https、更改字体、字号、去除限制&#xff09;的避坑笔记 一、安装Docker二、更新docker镜像源&#xff1a;三、安装Dpanel四、安装onlyoffice五、更改字体和字号六、去除限制 动手前&#xff0c;预防遭遇各种莫名奇妙的问题&#xff…...

Excel 技巧11 - 如何使用Excel作成简单的排班表(★★),weekday 函数,TEXT函数

本文讲了如何在Excel中制作简单的排班表。 1&#xff0c;排班表Layout效果 - B2 单元格找那个输入 日期 - C3 - AG3 输入日&#xff0c;就是该月份的几号&#xff0c;比如1月5号&#xff0c;就输入5 如果是周六周日&#xff0c;背景色显示为绿色 - B4 ~ 输入员工名称 当 B2…...

StarRocks 怎么让特定的SQL路由到FE master节点的

背景 本文基于 StarRocks 3.1.7 大家都知道对于Starrocks来说 FE 是分 master和follower的&#xff0c;而只有master节点才能对元数据进行写操作。但是为什么呢&#xff1f;哪里有体现呢&#xff1f; 这其中的原因在网上是搜不到的&#xff0c;所以大家只知道只有master节点才…...

在Windows/Linux/MacOS C++程序中打印崩溃调用栈和局部变量信息

打印崩溃调用栈和局部变量信息的方法有所不同。以下是针对 Windows、Linux 和 MacOS 的示例代码。 Windows 在 Windows 上&#xff0c;可以使用 Windows API 来捕获异常并打印调用栈。 #include <windows.h> #include <DbgHelp.h> #include <stdio.h> #in…...

解决npm install安装出现packages are looking for funding run `npm fund` for details问题

当我们运行npm install时&#xff0c;可能会收到类似以下的提示信息&#xff1a;“x packages are looking for funding.” 这并不是错误提示&#xff0c;也不会影响项目的正常运行。其实实在提醒有一些软件包正在寻求资金支持。 根据提示输入npm fund可以查看详细的信息&#…...

豆包MarsCode:小C点菜问题

问题描述 思路分析 这道题的核心任务是找出所有不超过给定价格 m 的菜肴中&#xff0c;最常见的菜肴价格&#xff0c;最后返回该价格的出现次数。 1. 题意理解&#xff1a; 给定一个最大价格 m&#xff0c;小C只会选择价格不超过 m 的菜。菜单上有 n 道菜&#xff0c;每道菜…...

K8S中Pod控制器之CronJob(CJ)控制器

CronJob 控制器是 Kubernetes 中用于周期性执行任务的一种控制器&#xff0c;它基于 Job 控制器来创建和管理作业。以下是 CronJob 的一些关键特点&#xff1a; 周期性调度&#xff1a;CronJob 允许您定义一个基于时间的调度&#xff0c;类似于 Linux 的 cron 工具&#xff0c;…...

FRP内网穿透0.61.1新版教程

在上一篇zerotier讲述了如何实现虚拟局域网搭建&#xff0c;这篇会讲述FRP内网穿透的使用教程 那么frp与zerotier的区别是什么呢&#xff1f;&#xff08;说人话&#xff09; FRP 主要用于内网服务向外网的单向暴露。 ZeroTier 用于构建一个虚拟的私有网络&#xff0c;实现多点…...

亲测解决`data_array` is not of type `MetaTensor, assuming affine to be identity

这个问题是由于orientation的数据增强在scaling之后导致的,解决方法是将这两个数据增强的顺序调换。 问题原文 lib/python3.10/site-packages/monai/transforms/spatial/array.py:623: UserWarning: `data_array` is...

python+pygame+pytmx+map editor开发一个tiled游戏demo 05使用object层初始化player位置

代码 import mathimport pygame# 限制物体在屏幕内 import pytmxdef limit_position_to_screen(x, y, width, height):"""限制物体在屏幕内"""x max(0, min(x, SCREEN_WIDTH - width)) # 限制x坐标y max(0, min(y, SCREEN_HEIGHT - height))…...

Git实用指南:忽略文件、命令别名、版本控制、撤销修改与标签管理

目录 1.忽略特殊文件 1.1.那如何配置我们需要忽略的文件的呢&#xff1f; 1.2.如何检验效果&#xff1f; 2.给命令配置别名 3.基本操作之版本回退 3.1.使用场景&#xff1a; 3.2.使用方法&#xff1a; 4.撤销修改 情况一&#xff1a;对于工作区的代码&#xff0c;还没…...

wordpress安装完后台无格式解决方法(样式加载不出来)

刚安装的wordpress,进入后台后,没有样式。 1.如果ip进入,可能一切正常 2.域名进入,遇到这种情况概率大(经过了nginx代理) 正常访问文章的话是没问题的,只是管理后台存在这样的代码,样式没加载出来。 美国随机地址生成器:美国随机地址生成器(随机地址生成器 - 生成全…...

数据库管理-第285期 Oracle 23ai:深入浅出向量索引(20250117)

数据库管理285期 20245-01-17 数据库管理-第285期 Oracle 23ai&#xff1a;深入浅出向量索引&#xff08;20250117&#xff09;1 HNSW事务支持解读 2 IVF分区支持解读 3 混合向量索引何时选择混合向量索引为何选择混合向量索引 总结 数据库管理-第285期 Oracle 23ai&#xff1a…...

日志(elk stack)基础语法学习,零基础学习

ELK Stack 是一组开源的日志管理工具&#xff0c;包括 Elasticsearch、Logstash 和 Kibana。Elasticsearch 用于存储和搜索日志数据&#xff0c;Logstash 用于收集和处理日志数据&#xff0c;而 Kibana 提供了一个强大的可视化界面来分析和监控这些数据。以下是 ELK Stack 的基…...

Mysql InnoDB B+Tree是什么?

“mysql中常用的数据库搜索引擎InnoDB,其索引通过BTree的方式进行构建。” 实在想不起来BTree是怎么一回事了。以点带线&#xff0c;将涉及到的数据结构一起复习一下。 文章目录 数据结构定义红黑树定义使命 BTree定义使命 BTree定义 InnoDB BTree 旋转与调整二叉排序树插入删…...

Java基础(二)

提示:这部分内容对逆向重要,需重点掌握。 1.常见数据类型 1.1 List系列 类似于Python中的列表 List是一个接口,接口下面有两个常见的类型(目的是可以存放动态的多个数据) ArrayList,连续的内存地址存储(内部自动扩容) -> Python列表的特点LinkedList,底层基于链表…...

【网络协议】【http】【https】TLS1.3

【网络协议】【http】【https】TLS1.3 TLS1.3它的签名算法和密钥交换算法&#xff0c;默认情况下是被固定了下来的&#xff0c;他的加密套件里面呢&#xff0c;只包含了对称加密算法和摘要算法 客户端和服务器第一次连接 仍然需要1RTT &#xff0c;不能0-RTT 第一次连接 1.客…...

K8S中Pod控制器之Job控制器

Job&#xff0c;主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。 一次性任务&#xff1a;Job 用于运行那些只需要执行一次的任务&#xff0c;如数据分析、图像渲染或批量处理。 成功终止&#xff1a;Job 会跟踪其创建的 Pod 的成功…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

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;用于图像分割或平滑处理。 该函数将输入图像中的…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...