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 的成功…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
