JavaScript语言的正则表达式
JavaScript语言的正则表达式详解
正则表达式(Regular Expression,简称Regex或RegExp)是一种强大的文本处理工具,可以在字符串中执行模式匹配和替换操作。在JavaScript中,正则表达式是处理字符串时不可或缺的部分,它为开发者提供了灵活的字符串操作能力。
本文将对JavaScript中的正则表达式进行深入解析,包括基本概念、语法、常用方法和实际应用,帮助读者全面理解正则表达式的使用。
一、正则表达式基础
1.1 什么是正则表达式?
正则表达式是一种用于描述字符串模式的工具,它由普通字符(如字母和数字)和特殊字符(称为元字符)组成。正则表达式可以用来验证字符串是否符合某种特定的模式,提取字符串中的信息,或对字符串进行替换和修改等操作。
1.2 创建正则表达式
在JavaScript中,可以用两种方式创建正则表达式:
-
字面量方式:
javascript const regex = /pattern/flags; -
构造函数方式:
javascript const regex = new RegExp('pattern', 'flags'); -
pattern:表示要匹配的文本模式。
- 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可以匹配abc或def。
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语言的正则表达式详解 正则表达式(Regular Expression,简称Regex或RegExp)是一种强大的文本处理工具,可以在字符串中执行模式匹配和替换操作。在JavaScript中,正则表达式是处理字符串时不可或缺的部分&…...
R语言的编程范式
R语言的编程范式探讨 引言 R语言作为一种专门用于统计分析和数据可视化的编程语言,近年来得到了广泛的应用。无论是在学术研究、企业分析,还是在数据科学的各个领域,R语言凭借其强大的数据处理能力和丰富的图形化工具,吸引了大批…...
CentOS9 安装Docker+Dpanel+onlyoffice(https、更改字体、字号、去除限制)的避坑笔记
CentOS9 安装Dockeronlyoffice(https、更改字体、字号、去除限制)的避坑笔记 一、安装Docker二、更新docker镜像源:三、安装Dpanel四、安装onlyoffice五、更改字体和字号六、去除限制 动手前,预防遭遇各种莫名奇妙的问题ÿ…...
Excel 技巧11 - 如何使用Excel作成简单的排班表(★★),weekday 函数,TEXT函数
本文讲了如何在Excel中制作简单的排班表。 1,排班表Layout效果 - B2 单元格找那个输入 日期 - C3 - AG3 输入日,就是该月份的几号,比如1月5号,就输入5 如果是周六周日,背景色显示为绿色 - B4 ~ 输入员工名称 当 B2…...
StarRocks 怎么让特定的SQL路由到FE master节点的
背景 本文基于 StarRocks 3.1.7 大家都知道对于Starrocks来说 FE 是分 master和follower的,而只有master节点才能对元数据进行写操作。但是为什么呢?哪里有体现呢? 这其中的原因在网上是搜不到的,所以大家只知道只有master节点才…...
在Windows/Linux/MacOS C++程序中打印崩溃调用栈和局部变量信息
打印崩溃调用栈和局部变量信息的方法有所不同。以下是针对 Windows、Linux 和 MacOS 的示例代码。 Windows 在 Windows 上,可以使用 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时,可能会收到类似以下的提示信息:“x packages are looking for funding.” 这并不是错误提示,也不会影响项目的正常运行。其实实在提醒有一些软件包正在寻求资金支持。 根据提示输入npm fund可以查看详细的信息&#…...
豆包MarsCode:小C点菜问题
问题描述 思路分析 这道题的核心任务是找出所有不超过给定价格 m 的菜肴中,最常见的菜肴价格,最后返回该价格的出现次数。 1. 题意理解: 给定一个最大价格 m,小C只会选择价格不超过 m 的菜。菜单上有 n 道菜,每道菜…...
K8S中Pod控制器之CronJob(CJ)控制器
CronJob 控制器是 Kubernetes 中用于周期性执行任务的一种控制器,它基于 Job 控制器来创建和管理作业。以下是 CronJob 的一些关键特点: 周期性调度:CronJob 允许您定义一个基于时间的调度,类似于 Linux 的 cron 工具,…...
FRP内网穿透0.61.1新版教程
在上一篇zerotier讲述了如何实现虚拟局域网搭建,这篇会讲述FRP内网穿透的使用教程 那么frp与zerotier的区别是什么呢?(说人话) FRP 主要用于内网服务向外网的单向暴露。 ZeroTier 用于构建一个虚拟的私有网络,实现多点…...
亲测解决`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.那如何配置我们需要忽略的文件的呢? 1.2.如何检验效果? 2.给命令配置别名 3.基本操作之版本回退 3.1.使用场景: 3.2.使用方法: 4.撤销修改 情况一:对于工作区的代码,还没…...
wordpress安装完后台无格式解决方法(样式加载不出来)
刚安装的wordpress,进入后台后,没有样式。 1.如果ip进入,可能一切正常 2.域名进入,遇到这种情况概率大(经过了nginx代理) 正常访问文章的话是没问题的,只是管理后台存在这样的代码,样式没加载出来。 美国随机地址生成器:美国随机地址生成器(随机地址生成器 - 生成全…...
数据库管理-第285期 Oracle 23ai:深入浅出向量索引(20250117)
数据库管理285期 20245-01-17 数据库管理-第285期 Oracle 23ai:深入浅出向量索引(20250117)1 HNSW事务支持解读 2 IVF分区支持解读 3 混合向量索引何时选择混合向量索引为何选择混合向量索引 总结 数据库管理-第285期 Oracle 23ai:…...
日志(elk stack)基础语法学习,零基础学习
ELK Stack 是一组开源的日志管理工具,包括 Elasticsearch、Logstash 和 Kibana。Elasticsearch 用于存储和搜索日志数据,Logstash 用于收集和处理日志数据,而 Kibana 提供了一个强大的可视化界面来分析和监控这些数据。以下是 ELK Stack 的基…...
Mysql InnoDB B+Tree是什么?
“mysql中常用的数据库搜索引擎InnoDB,其索引通过BTree的方式进行构建。” 实在想不起来BTree是怎么一回事了。以点带线,将涉及到的数据结构一起复习一下。 文章目录 数据结构定义红黑树定义使命 BTree定义使命 BTree定义 InnoDB BTree 旋转与调整二叉排序树插入删…...
Java基础(二)
提示:这部分内容对逆向重要,需重点掌握。 1.常见数据类型 1.1 List系列 类似于Python中的列表 List是一个接口,接口下面有两个常见的类型(目的是可以存放动态的多个数据) ArrayList,连续的内存地址存储(内部自动扩容) -> Python列表的特点LinkedList,底层基于链表…...
【网络协议】【http】【https】TLS1.3
【网络协议】【http】【https】TLS1.3 TLS1.3它的签名算法和密钥交换算法,默认情况下是被固定了下来的,他的加密套件里面呢,只包含了对称加密算法和摘要算法 客户端和服务器第一次连接 仍然需要1RTT ,不能0-RTT 第一次连接 1.客…...
K8S中Pod控制器之Job控制器
Job,主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。 一次性任务:Job 用于运行那些只需要执行一次的任务,如数据分析、图像渲染或批量处理。 成功终止:Job 会跟踪其创建的 Pod 的成功…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
