JS中的正则表达式简要梳理

news2024/12/23 23:17:43

文章目录

  • 一、结构
    • 1、匹配模式
    • 2、字符组
    • 3、量词
    • 4、贪婪匹配和惰性匹配
    • 5、多选分支
    • 6、匹配模式关键词
  • 二、位置
    • 1、位置锚点
  • 三、括号分组
    • 1、分组
    • 2、分支结构
    • 3、引用分组
    • 4、括号嵌套
  • 四、回溯模式
    • 1、回溯匹配

正则表达式(Regular Expression)‌是一种强大的文本处理工具,用于匹配字符串中的字符组合模式。在JavaScript中,正则表达式是一个对象,可以用于文本搜索和文本替换等操作。例如,检查字符串是否包含某个特定单词、验证用户输入的电话号码或电子邮件地址是否符合特定格式,或者从字符串中提取特定部分的内容。

一、结构

1、匹配模式

精确匹配应用比较局限,匹配数据比较少;模糊匹配结果可能性更多,能够满足更多场景

var regex = /hello/; // 精确匹配
regex = /^hello$/; // 精确匹配 + 完全匹配
regex = /hel{2}o/; // 模糊匹配 + 横向模糊(重复)
regex = /hel[lk]o/; // 模糊匹配 + 纵向模糊(该位置有多种可能)([lk]只占据一个位置)
console.log( regex.test("hello") );

2、字符组

字符组归纳了一连串的字符或者枚举值

// 正向字符组
12345可以表示成[1-5],该规范默认会被识别成字符组([-15]就不会被识别成字符组)
bcdefg可以表示成[b-g]

// 取反字符组
[^1-5]表示除了12345以外的字符

// 字符组简写
数字:\d 表示 [0-9];\D 表示 [^0-9]
单词(数字、字母、下划线):\w 表示 [a-zA-Z0-9_];\W 表示 [^a-zA-Z0-9_]
空白符(空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符):
\s 表示 [ \t\v\n\r\f];\S 表示 [^ \t\v\n\r\f]; // 注意空格
. 表示 任意字符

3、量词

假设匹配数量是num

{m} 表示 num = m
{m,} 表示 m <= num
{m, n} 表示 m <= num <= m
? 表示 0 <= num <= 1
+ 表示 1 <= num
* 表示 0 <= num

4、贪婪匹配和惰性匹配

  • 默认贪婪匹配,量词后加?表示惰性匹配
  • {m, n} + 贪婪匹配 === n
  • {m, n}? + 惰性匹配 === m
var regex = /\d{2,5}/; // 12345
regex = /\d{2,5}?/; // 12
const string = "123456";
console.log(string.match(regex) );

5、多选分支

var regex = /red|color/g;
var string = "red yellow color"; // 示范值 [red, color]
string = "redcolor"; // red 匹配到了不会再选择领一个分支;分支也是默认惰性
console.log(string.match(regex) );

6、匹配模式关键词

g 表示 全局匹配,类似于贪婪匹配,匹配到一个满足条件的,不会停止,继续往下匹配
i 表示 忽略大小写
m 表示 多行,针对有\n换行符的字符串

二、位置

在这里插入图片描述

1、位置锚点

^ 表示 匹配开头,在多行匹配中匹配行开头
$ 表示 匹配结尾,在多行匹配中匹配行结尾
\b 表示 单词边界(单词左右两边和非单词的位置)
\B 表示 非单词边界(单词内部的字符之间的位置)
(?=key) 表示 key的一个子模式,表示key前面的那个位置
(?!key) 表示 key的一个子模式,表示不是key前面的那个位置
(?<=key) 表示 key的一个子模式,表示key后面的那个位置
(?<!key) 表示 key的一个子模式,表示不是key后面的那个位置

案例

// 空格匹配
console.log("hello".replace(/^|$/g, '#')); // #hello#
// 多行匹配
console.log("hello\nworld".replace(/^|$/gm, '#')); // #hello##world# m表示多行
// 单词边界
"world+".replace(/\b/g, '#') // #world#+ 注意头部和尾部和单词之间也算一个边界
// o前面的位置
"world+".replace(/(?=o)/g, '#') // w#orld+
// o后面的位置
"world+".replace(/(?<=o)/g, '#') // wo#rld+

三、括号分组

1、分组

字符的集合

// 固定字符串12的组合,对他们整体的子模式
console.log("12 123".match(/(12)+/g)) // 12 12

2、分支结构

该位置可选字符

/1(1|2)/g.test("12") // true
"121213".match(/1(1|2)/g) // [12, 12]
"121213".match(/1(1|2)+/g) // [1212] +号会让他变成贪婪匹配

3、引用分组

分组变量

// 正则中的分组引用 === \index 如\1, \2
"1231213".match(/(12)\d\1/g) // 12312   \1 表示分组变量 (12)
// 替换变量 $ + index
"12123".replace(/(12)(123)/g, "$2$1") // $1 表示分组变量 (12) $2 表示分组变量 (123)

// 分组全部替换
// $1 === 123; $2 === 12
// str被reg匹配为123 12 123 12,剩余字符串为‘’,直接替换
str = '123 12 123 12'
reg = /(123) (12) \1 \2/g
str.replace(reg, '$2-$1')
// return '12-123'

// 分组部分替换
// str被reg匹配为12 123,剩余字符串为'124 {regStr} 12'
// 12-123替换regStr,最终为'124 12-123 12'
str = '124 12 123 12'
reg = /(123)?(12) \1/g
str.replace(reg, '$2-$1')
// return '124 12-123 12'

4、括号嵌套

// 从左到右读取,碰到括号进入括号,再从左到右读取
"123".replace(/(\d(\d(\d)))/, "$1-$2-$3") // 123-12-3

四、回溯模式

1、回溯匹配

"12223".match(/12{1,3}3/) // 匹配5步就结束了
// 无回溯;匹配1,匹配2子模式,匹配3,顺利结束

"1223".match(/12{1,3}3/) // 1223
// 匹配到122以后,第4步在第四个位置,依然匹配字符串2,发现是3,于是回到上一步的状态,结束2{1,3}子模式
// 第5步回溯
// 第6步开始对3的匹配,在第四个位置匹配3,找到了,结束字符串3的匹配

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

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

相关文章

【风水】-- 买车和用车的风水知识

目录 一、阴阳与车的风水 1. 车的属性&#xff1a;阴阳平衡 2. 车主与车的阴阳互补 二、五行与车的风水 1. 车的颜色与五行 2. 车主的五行与车的五行匹配 3. 五行相生相克的应用 三、八卦与车的风水 1. 车位选择与八卦方位 2. 车内布置与八卦 四、总结 结合阴阳、五…

深度剖析Linux进程控制

文章目录 &#x1f355;前言&#x1f95d;进程创建fork 函数fork函数返回值写时拷贝fork 使用场景fork调用失败的原因 &#x1f965;进程终止进程退出码进程正常退出return 退出exit 函数_exit 函数return VS exit VS _exit 进程异常退出 &#x1f347;进程等待进程等待的必要性…

网络安全,文明上网(6)网安相关法律

列举 1. 《中华人民共和国网络安全法》&#xff1a; - 这是中国网络安全的基本法律&#xff0c;于2017年6月1日开始实施。该法律明确了网络运营者的安全保护义务&#xff0c;包括采取数据分类、重要数据备份和加密等措施。 2. 《中华人民共和国数据安全法》&#xff1a; …

IDEA2023 SpringBoot整合MyBatis(三)

一、数据库表 CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,age INT,gender ENUM(Male, Female, Other),email VARCHAR(100) UNIQUE,phone_number VARCHAR(20),address VARCHAR(255),date_of_birth DATE,enrollment_date DATE,cours…

【Vue】 npm install amap-js-api-loader指南

前言 项目中的地图模块突然打不开了 正文 版本太低了&#xff0c;而且Vue项目就应该正经走项目流程啊喂&#xff01; npm i amap/amap-jsapi-loader --save 官方说这样执行完&#xff0c;就这结束啦&#xff01;它结束了&#xff0c;我还没有&#xff0c;不然不可能记录这篇文…

八股文:适合背诵的基础知识进行整理

四、IO进程&#xff1a;IPC 1. 标准IO和系统IO的区别 标准文件IO 概念&#xff1a;C库中定义的一组用于输入输出的函数 特点 &#xff08;1&#xff09;有缓存机制&#xff0c;减少系统调用 &#xff08;2&#xff09;围绕文件流进行操作 &#xff08;3&#xff09;默认…

面试干货:软件测试常见面试题(附答案)

1、文档测试主要包含什么内容? 参考答案&#xff1a; 在国内软件开发管理中&#xff0c;文档管理几乎是最弱的一项&#xff0c;因而在测试工作中特别容易忽略文档测试也就不足为奇了。要想给用户提供完整的产品&#xff0c;文档测试是必不可少的。文档测试一般注重下面几个方…

查询 linux相关信息

文章目录 前言查询 linux相关信息1. 查询内存大小&#xff08;mem&#xff09;2. 统计 当前系统的 CPU 核心数3. 查看系统的操作系统信息4. Ubuntu 系统版本的版本号 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff…

【动手学深度学习Pytorch】4. 神经网络基础

模型构造 回顾一下感知机。 nn.Sequential()&#xff1a;定义了一种特殊的module。 torch.rand()&#xff1a;用于生成具有均匀分布的随机数&#xff0c;这些随机数的范围在[0, 1)之间。它接受一个形状参数&#xff08;shape&#xff09;&#xff0c;返回一个指定形状的张量&am…

新版自助笔记-工作记录-2024-11-18

环境&#xff1a; Windows11 .Net 4.5.2 Vs20151.Web <sKey>平台上获取的通讯码</sKey> Web -> 设置 -> 系统设置 -> 通讯密钥<SoftKey>设备身份识别码</SoftKey> Web -> 终端设备管理 -> 身份识别码<ZZUrl>Web服务</ZZUr…

【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ ​ 目录 替换原理&#xff1a; 替换函数&…

Bug:引入Feign后触发了2次、4次ContextRefreshedEvent

Bug&#xff1a;引入Feign后发现监控onApplication中ContextRefreshedEvent事件触发了2次或者4次。 【原理】在Spring的文档注释中提示到&#xff1a; Event raised when an {code ApplicationContext} gets initialized or refreshed.即当 ApplicationContext 进行初始化或者刷…

【智谱清言-注册_登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

煤炉Mercari新手开店十问十答

在跨境电商的浪潮中&#xff0c;Mercari&#xff08;煤炉&#xff09;作为一个备受瞩目的C2C二手商品交易平台&#xff0c;吸引了众多新手卖家的目光。然而&#xff0c;初次在Mercari开店可能会遇到各种问题和挑战。为此&#xff0c;我特别整理了2024年最新的十问十答指南&…

[面试]-golang基础面试题总结

文章目录 panic 和 recover**注意事项**使用 pprof、trace 和 race 进行性能调试。**Go Module**&#xff1a;Go中new和make的区别 Channel什么是 Channel 的方向性&#xff1f;如何对 Channel 进行方向限制&#xff1f;Channel 的缓冲区大小对于 Channel 和 Goroutine 的通信有…

【Flask+Gunicorn+Nginx】部署目标检测模型API完整解决方案

【Ubuntu 22.04FlaskGunicornNginx】部署目标检测模型API完整解决方案 文章目录 1. 搭建深度学习环境1.1 下载Anaconda1.2 打包环境1.3 创建虚拟环境1.4 报错 2. 安装flask3. 安装gunicorn4. 安装Nginx4.1 安装前置依赖4.2 安装nginx4.3 常用命令 5. NginxGunicornFlask5.1 ng…

一个用纯PHP开发的服务器-workerman

什么是Workerman 简单的说Workerman是一个纯php开发的服务器。 workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务&#xff0c;而不用去了解PHP socket以及PHP多进程细节。 workerman本身是一个PHP多进程服务器&#xff0c;类似nginxphp-fpm的结合体&am…

如何在Linux上安装Canal同步工具

1. 下载安装包 所用到的安装包 canal.admin-1.1.4.tar.gz 链接&#xff1a;https://pan.baidu.com/s/1B1LxZUZsKVaHvoSx6VV3sA 提取码&#xff1a;v7ta canal.deployer-1.1.4.tar.gz 链接&#xff1a;https://pan.baidu.com/s/13RSqPinzgaaYQUyo9D8ZCQ 提取码&#xff1a;…

Leetcode 组合

使用回溯来解决此问题。 提供的代码使用了回溯法&#xff08;Backtracking&#xff09;&#xff0c;这是一种通过递归探索所有可能解的算法思想。以下是对算法思想的详细解释&#xff1a; 核心思想&#xff1a; 回溯法通过以下步骤解决问题&#xff1a; 路径选择&#xff1a…

PyTorch使用教程-深度学习框架

PyTorch使用教程-深度学习框架 1. PyTorch简介 1.1-什么是PyTorch ​ PyTorch是一个广泛使用的开源机器学习框架&#xff0c;特别适合深度学习的应用。它以其动态计算图而闻名&#xff0c;允许在运行时修改模型&#xff0c;使得实验和调试更加灵活。PyTorch提供了强大的GPU加…