JavaScript-正则表达式方法(RegExp)

RegExp 对象用于将文本与一个模式匹配。

有两种方法可以创建一个 RegExp 对象:一种是字面量,另一种是构造函数。

字面量由斜杠 (/) 包围而不是引号包围。

构造函数的字符串参数由引号而不是斜杠包围。

new RegExp(pattern[, flags])

一.符集合

1.选择符(|,&)

类似逻辑运算符

2.转义字符(\)

注意需要转义的字符 ,比如后文提及到的元字符也可以这样理解 :d为普通字符 /d 将其转义为元字符使用 .为回车或换行外的任意字符 /.转义为普通字符

在正则中主要存在这些特殊字符:*,+,?,$,^,.,|,\,(,),{,},[,]

 注意:创建正则表达式的时候,构造函数方法需要多转义一次或者直接设置字面量传入。

3.边界约束符(^,$)
字符等价类
^以xxx开始
$以xxx结束
\b单词边界
\B非单词边界

4.普通元字符

d:digit s:space w:word

字符等价类含义
.[^\r\n]除了回车符和换行符之外的所有字符
\d[0-9]数字字符
\D[^0-9]非数字字符
\s[\t\n\x0B\f\r]空白符
\S[^\t\n\x0B\f\r]非空白符
\w[a-zA-Z_0-9]单词字符(字母、数字、下划线)
\W[^a-zA-Z_0-9]非单词字符
5.量词
字符含义
出现零次或一次(最多出现一次) 禁止贪婪
+出现一次或者多次(至少出现一次) 贪婪
*出现零次或者多次(任意次) 贪婪
{n}出现n次
{n,m}出现n到m次
{n,}至少出现n次 贪婪
6.原子表([ ],[^])

 [abcd] 包含其中一个即可 [] 实际代表的就是 一位字符

 [^abcd] 只要不是他们四个中的一个即可 [^] 实际代表的就是 一位字符

在原子表中的有些元字符无作用,只会是普通字符,例如 .

匹配所有字符:[\s\S]   [\d\D]   [\w\W]   [^]

let str='dekwjfih4c89fh8h87890@@@##$$1'

console.log(str.match(/[^]+/))

console.log(str.match(/[\s\S]+/))

console.log(str.match(/[\d\D]+/))

console.log(str.match(/[\w\W]+/))

7.原子组  ( ( ),( ?:))
①捕获组:( )

举个例子:

let test=`

<h1>

    henry

</h1>

<h2>man</h2>

正常情况下,我们这样提取:

let reg=/<h[1-6]>[\s\S]*</h[1-6]>/ 

但是发现h[1-6]重复 那么我们可以把它作为一个"组"

模式中的 \1 和 \2 表示第一个和第二个被捕获括号匹配的子字符串,而在正则表达式的替换环节,则要使用像 $1$2、...、$n 这样的语法。$&为当前匹配项,$'为匹配项左边的内容,$`为匹配项右边的内容。

此时后面的h[1-6]我们就可以利用“1”这个组获取

let reg=/<(h[1-6])>[\s\S]*<\/\1>/

利用函数:

无论哪种方式,0为整个内容

练习:验证邮箱

let reg=/^[\w-]+@([\w-]+\.)+(com|net|cn)$/i

②非捕获组:(?:) 

③原子组别名 (?< >)

数字可以利用?<>创建别名

例如/?<h>(h[1-6])/     获取:$<h>即可

8.模式匹配标记(g,i,m,y,u,s)

g和y的区别:

g会跳过不满足的字符,而y只要遇到不满足就停止了

练习:

将下列内容转换为['name','price']输出(跳过非水果类)

    let goods=`

    #1 apple,200元 #

    #2 banana,300元 #

    #3 tool   #工具

    #4 pear,500元 #

    `

9.断言匹配 (?<=,?=) 

其实可以理解类似为条件语句 ?<=为判断前面的条件 (?<!则为后面不是) ?=为后面 (?!则为后面不是)

例如:把前面有hello的Jack改为jack

二.实例方法

1.RegExp.prototype.test()

test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。

2.RegExp.prototype.exec()

exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。

和String的match方法对比:

exec方法使得利用g修正符仍能看到字符属性 这是利用了RegExp.lastIndex这个实例属性。

3.RegExp.prototype.toString()

toString() 返回一个表示该正则表达式的字符串。

4.RegExp.prototype[Symbol.xx]()

支持正则表达式的 String 对象的方法有:

  • search: 检索与正则表达式相匹配的值
  • match: 找到一个或多个正则表达式的匹配。
  • matchAll: 找到一个或多个正则表达式的匹配。(baselin-2020)-相当于match的迭代器版本
  • replace: 替换与正则表达式匹配的子串。
  • split: 把字符串分割为字符串数组。

三.实例属性

1.RegExp.lastIndex()

lastIndex 是正则表达式的一个可读可写的整型属性,用来指定下一次匹配的起始索引。

正则的两大特性

1.懒惰
正常捕获字符串的时候, 每次都从下标0开始
解决方式: 给正则添加一个修饰符 g
2.贪婪
每次在捕获的时候, 会尽可能的多捕获一些东西(*,+)
解决方法: 在原有的修饰符后添加一个 ? 然后相当于开启非贪婪模式

正则的一些实用

1.批量校验正则

利用Array的实例方法:

const password='123enrY'

let regs=[/^[a-z0-9]{5,10}$/i,/[A-Z]/]

let state=regs.every(item=>item.test(password))

console.log(state?'正确':'错误')

2.封装全局匹配:

    function serach(string,reg){

        while(res=reg.exec(string)){

            result.push(res)

        }

    }

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信凯科技业绩波动明显:毛利率远弱行业,资产负债率偏高

《港湾商业观察》施子夫 1月8日&#xff0c;深交所官网显示&#xff0c;浙江信凯科技集团股份有限公司&#xff08;以下简称“信凯科技”&#xff09;主板IPO提交注册。 自2022年递交上市申请&#xff0c;信凯科技的IPO之路已走过两年光景&#xff0c;尽管提交注册&#xff0…

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关&#xff08;RD Gateway&#xff09;中的一个重大漏洞&#xff0c;该漏洞可能允许攻击者利用竞争条件&#xff0c;导致拒绝服务&#xff08;DoS&#xff09;攻击。该漏洞被标识为CVE-2025-21225&#xff0c;已在2025年1月的补丁星期二更新中得到…

4G DTU赋能智能配电环网柜通信运维管理

在智能电网建设持续推进下&#xff0c;智能配电环网柜作为配电网的关键节点设备&#xff0c;其稳定、高效运行对保障电力可靠供应是品质生活的基本保障。通信系统是实现智能配电环网柜远程监控与管理的核心纽带&#xff0c;而4G DTU&#xff08;数据传输单元&#xff09;凭借其…

STC的51单片机LED点灯基于KEIL

前言&#xff1a; 该文源于回答一个朋友的问题&#xff0c;代码为该朋友上传&#xff0c;略作修改&#xff0c;在此说明问题以及解决问题的思路&#xff0c;以减少新手错误。 电路图&#xff1a; 该位朋友未上传电路图&#xff0c;说明如下&#xff1a; stc8g1k08a-sop8控制…

C++ 文字识别OCR

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

基于springboot的自习室预订系统

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 项目包含&#xff1a; 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG

注&#xff1a;本文为“TCP 连接状态标识”相关文章合辑。 TCP 的状态&#xff1a;SYN, FIN, ACK, PSH, RST, URG 简介及 ACK 确认机制 llzhang_fly 于 2020-09-19 05:25:26 发布 1、TCP 的状态 FLAGS 字段状态 在 TCP 层&#xff0c;有个 FLAGS 字段&#xff0c;这个字段有…

Spring AI 从入门到实践

​Spring AI 从入门到实践 1.什么是Spring AI 2.使用Spring Boot&Spring AI快速构建AI应用程序 3.ChatClient&Chat Model简化与AI模型的交互 4.Spring AI Prompt:与大模型进行有效沟通 5.结构化输出大模型响应 6.实战:AI聊天机器人 Ben技术站关注Java技术&#x…

1月13日学习

[HITCON 2017]SSRFme 直接给了源代码&#xff0c;题目名称还是ssrf&#xff0c;那么该题大概率就是SSRF的漏洞&#xff0c;进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头&#xff0c;如果存在&#xff0c;则将其拆分为数组&#xff0c;并将第一个 IP 地址…

【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍

从帝国理工的PPT学习。 什么是RDMA Remote Direct Memory Access&#xff0c;也就是Remote的DMA&#xff0c;是一种硬件机制&#xff0c;能直接访问远端结点的内存&#xff0c;而不需要处理器介入。 其中&#xff1a; Remote&#xff1a;跨node进行数据传输Direct&#xff…

Docker

1. 初始Docker 1.1. 什么是Docker&#xff1f; 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环…

Deep4SNet: deep learning for fake speech classification

Deep4SNet&#xff1a;用于虚假语音分类的深度学习 摘要&#xff1a; 虚假语音是指即使通过人工智能或信号处理技术产生的语音记录。生成虚假录音的方法有"深度语音"和"模仿"。在《深沉的声音》中&#xff0c;录音听起来有点合成&#xff0c;而在《模仿》中…

Navicat Premium 原生支持阿里云 PolarDB 数据库

近日&#xff0c;我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证&#xff0c;这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎&#xff08;PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…

LabVIEW光流算法的应用

该VI展示了如何使用NI Vision Development Module中的光流算法来计算图像序列中像素的运动矢量。通过该方法&#xff0c;可以实现目标跟踪、运动检测等功能&#xff0c;适用于视频处理、机器人视觉和监控领域。程序采用模块化设计&#xff0c;包含图像输入、算法处理、结果展示…

JAVA:在IDEA引入本地jar包的方法(不读取maven目录jar包)

问题&#xff1a; 有时maven使用的jar包版本是最新版&#xff0c;但项目需要的是旧版本&#xff0c;每次重新install会自动将mavan的jar包覆盖到项目的lib目录中&#xff0c;导致项目报错。 解决&#xff1a; 在IDEA中手动配置该jar包对应的目录。 点击菜单File->Projec…

升级 SpringBoot3 全项目讲解 — 为什么 SpringBoot3 应该抛弃 Maven,搭配 Gradle 来使用?

学会这款 &#x1f525;全新设计的 Java 脚手架 &#xff0c;从此面试不再怕&#xff01; 随着 Spring Boot 3 的发布&#xff0c;许多开发者开始考虑如何将现有项目升级到最新版本。Spring Boot 3 带来了许多新特性&#xff0c;包括对 Java 17 的支持、更好的性能优化以及对 G…

大疆上云API基于源码部署

文章目录 大疆上云API基于源码部署注意事项1、学习官网2、环境准备注意事项3、注册成为DJI开发者4、下载前后端运行所需要的包/依赖前端依赖下载后端所需要的Maven依赖包 用到的软件可以在这里下载5、MySQL数据库安装安装MySQL启动MySQL服务在IDEA中配置MySQL的连接信息 6、Red…

Js:正则表达式及正则表达式方法

① 创建正则表达式对象&#xff1a; /** 语法&#xff1a;* var reg new RegExp(正则表达式, 匹配模式);* 匹配模式(字符串类型)&#xff1a;i --> 忽略大小写 g --> 全局匹配模式*/var reg new RegExp(a, i);var str abc; /** 正则表达式的方法&#…

【论文阅读】具身人工智能(Embodied AI)综述:连接数字与物理世界的桥梁

摘要 具身人工智能&#xff08;Embodied AI&#xff09;对于实现通用人工智能&#xff08;AGI&#xff09;至关重要&#xff0c;是连接数字世界与物理世界的各类应用的基础。近年来&#xff0c;多模态大模型&#xff08;MLMs&#xff09;和世界模型&#xff08;WMs&#xff09…

数据结构--二叉树

目录 有序二叉树&#xff1a; 平衡二叉树&#xff1a; 234树&#xff1a; 红黑树 红黑树特点&#xff1a; 为什么红黑树是最优二叉树&#xff1f; 哈夫曼树和哈夫曼编码 有序二叉树&#xff1a; 平衡二叉树&#xff1a; 在有序二叉树的基础上得来的&#xff0c;且左右子…