正则表达式查漏补缺(包括es9的新方法)

news2025/1/20 2:00:50

一、创建正则

1、方法创建正则

// let reg=new RegExp("a","ig")//检查字符串中是否包含a
// let str="a"
// console.log(reg.test("As"))

i是忽略大小写
g是全局匹配,不会只返回一个

2、字面量创建正则

// let reg=/a|c/i  //a或者c
// console.log(typeof reg,reg.test("ab1"))

二、[],(),{}的区别

[]表示或
[]里面的^表示除了,
要和外面的^区分

// let reg=/[ab]/i
// console.log(typeof reg,reg.test("b2we1"))
//[abc]===a|b|c
// let reg=/[a-z]/i
// console.log(typeof reg,reg.test("b2we1"))
// let reg=/a[bde]c/i
// console.log(typeof reg,reg.test("a1c"))
// let reg=/[^ab]/i
// console.log(typeof reg,reg.test("ab1"))

[]表示或的关系,()表示与的关系,{}表示数量{1,3}表示1-3个{1,}1此以上,+表示1-无穷大,*表示0-无穷大,?表示0-1,

// let reg=/(ab){1,3}/i
// let str="ababab"
// console.log(reg.test(str))

三、^和$、*,+,?以及一些通配符

*表示0-无穷大, ?表示0-1
+表示1–无穷大.

//^a表示a开头的,a$表示以a结尾,注意^a$==='a',只能有一个字符   ^a|a$   
// let reg=/^a|a$/i
// let str="aa"
// console.log(reg.test(str))

//.代表任意字符,除了换行和$,\转意字符,\表示,\在字符串里也是转意字符在字符串里\才是表达一个
/*
\w 任意字母和数字,下划线
\W 除了字母数字和下划线
\d [0-9]
\D [^0-9]
\s 空格
\S 除了空格
\b 单词边界
\B 除了单词边界
*/

四、String上面有关正则的方法

1、splite

// let str="2e1w1w1w1w1"
// var list=str.split(/[A-z]/)
// console.log(list)

2、search

/ let str="hello abc"
// let result1=str.search(/a[dbe]c/i);
// console.log(result1)
//返回的是索引

3、match

match
搭配全局可以返回所有符合正则的子串。

// let str="1d2edWDDDE332ed"
// let result1=str.match(/[A-z]/gi);
// console.log(result1)

4、replace

前面的是被替换的值,可以是正则,
可以用全局,后面是替换的值.

// let str="1d2edWDDDE332ed"
// let result1=str.replace(/d/g,"@");
// console.log(result1)

5、matchAll(新方法)

以前的写法

let str=`
    <ul>
        <li>   
                <a>肖申克的救赎</a>
                <p>上映时间:1994-9</p>
        </li>
        <li>   
                <a>阿甘正传</a>
                <p>上映时间:1994-7</p>
        </li>
    </ul>
`
const reg=/<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>\s/gs
let result;
let data=[];    

    while(result=reg.exec(str)){
        data.push({title:result[1],time:result[2]});
    }
    console.log(data)

现在的写法

let str=`
  <ul>
      <li>   
              <a>肖申克的救赎</a>
              <p>上映时间:1994-9</p>
      </li>
      <li>   
              <a>阿甘正传</a>
              <p>上映时间:1994-7</p>
      </li>
  </ul>
`
const reg=/<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>\s/gs
let result;
let data=[];    
  result=str.matchAll(reg)//得到一个可迭代的对象
  for(let t of result){
      data.push({name:t[1],time:t[2]})
  }
  console.log(data)

五、电话和邮箱的正则例子

1、手机号码的正则

号码我乱设置的

//手机号检查
//1373164731
//1 1
//2 [3-9]
//3-11 [0-9]
// let reg1=/^1[3-9][0-9]{9}$/
// let phonestr=1373164731
// console.log(reg1.test(phonestr))

2、邮箱的正则

//电子邮件 /\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}/
// let reg=/^\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}$/g
// let email="163@qq.com"
// console.log(reg.test(email))

六、es9的新方法

1、命名捕获分组

// let str2="<a href='https://ww.baidu.com'>测试</a>"
// const reg=/<a href='(?<url>.*)'>(?<text>.*)<\/a>/
// console.log(reg.test(str2))
// console.log(reg.exec(str2))

在这里插入图片描述

2、反向断言,正向断言

/前断言
// let str="231312sddee23112啦啦211"
// let reg=/\d+(?=啦)/
// // console.log(reg.exec(str))
// //不要忘记数量描述 后断言
// let reg2=/(?<=啦)\d+/
// console.log(reg2.exec(str))

反向断言:
在这里插入图片描述
正向断言:
在这里插入图片描述

3、dotAll模式

就是模式添加了dotAll,//s,在正则后面加s,建议在后面加?避免贪婪模式的影响

let str=`
    <ul>
        <li>   
                <a>肖申克的救赎</a>
                <p>上映时间:1994-9</p>
        </li>
        <li>   
                <a>阿甘正传</a>
                <p>上映时间:1994-7</p>
        </li>
    </ul>
`
const reg=/<li>.*?<a>(.*?)<\/a>.*?<p>(.*?)<\/p>\s/gs //必须打开全局模式,和关闭贪婪模式
let result;
let data=[];    
    result=str.matchAll(reg)//得到一个可迭代的对象 
    for(let t of result){
        data.push({name:t[1],time:t[2]})
    }
    console.log(data)
    ```
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/b5c1d189c81e4e66be694fd8a45c09c6.png)

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

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

相关文章

挂载本地光盘

一、挂载本地光盘到/mnt 使用mount模块 二.配置YUM源 &#xff08;1&#xff09;使用yum_repository模块 &#xff08;2&#xff09; 控制端主机编辑配置文件使用synchronize模块发送到受控主机 &#xff08;3&#xff09; 使用file模块创建一个base.repo文件&#xff0c;并…

HarmonyOS鸿蒙学习笔记(17)获取屏幕宽高等属性

ohos.display组件使用获取屏幕属性的三种方法getDefaultDisplay(callback: AsyncCallback<Display>)的用法getDefaultDisplay()的用法getAllDisplay(callback: AsyncCallback<Array<Display>>)的用法参考资料ohos.display屏幕属性提供管理显示设备的一些基础…

linux 设备树简析

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 设备树的来源 在 Linux 中&#xff0c;每个设备驱动&#xff0c;管理一组设备数据&#xff0c;类似面向对象编程中类和其实例对象的关系。一段时…

VMware-【Linux】centos7 /boot磁盘扩容

我的/boot当时安装的时候只分了不到200MB现在不够了所以扩容下这是我学习的文章&#xff0c;细节说明了很多地方还有一些坑&#xff1a;https://blog.51cto.com/u_15801765/5697187开始操作前&#xff0c;可以先用命令 df -hl 记录一下你现在/boot 剩余磁盘空间。到文章最后面我…

设计模式_创建型模式 -《工厂模式》

设计模式_创建型模式 -《工厂模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 概述 需求&#xff1a;设计一个咖啡店点餐系统。 设计一个咖啡类&#xff08;Coffee&#xff09;&#xff0c;并定义其…

MySQL学习之一条SQL查询语句的执行

文章目录前言一、MySQL基础架构二、连接器三、查询缓存四、分析器五、优化器六、执行器前言 今天我们通过一条SQL查询语句的执行过程&#xff0c;来剖析MySQL的基础架构。让我们从宏观上先有一个对MySQL的认识与了解 一、MySQL基础架构 首先&#xff0c;我们要对MySQL的整体架…

深入分析Linux PCI驱动框架分析(二)

说明&#xff1a; Kernel版本&#xff1a;4.14ARM64处理器使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 本文将分析Linux PCI子系统的框架&#xff0c;主要围绕Linux PCI子系统的初始化以及枚举过程分析&#xff1b;如果对具体的硬件缺乏了解&#xff…

详解c++---vector介绍

这里写目录标题什么是vectorvector的定义reservevector数据插入push_backinsertresizeassignvector数据的删除pop_backeraseclearvector性质查看sizecapacityemptymax_sizevector元素修改operator[ ]atfrontbackvector其他函数operatorswap什么是vector vector是表示可变大小数…

深入浅出Cookie、Session、Token:背后的技术原理

目录 简介 . 网站交互体验升级 1.1 无状态的 HTTP 协议 1.2 解决之道 2. Cookie方案 2.1 Cookie 定义和作用 2.2 服务端创建 Cookie 2.4 存在的问题 3. Session 方案 3.1 Session 机制的概念 3.2 简单的交互流程 3.3 Session 的实现方式 3.4 存在的问题 4. Token…

【微服务】Nacos 认证机制

目录 一、背景 二、需求 三、方案 1、安全架构选型 2、会话管理 2.1、会话选型 2.2、Session 登录流程 2.3、Token 登录流程 2.4、jwt 框架选型 2.5、会话超时 3、SSO 支持 4、UI设计 5、接口设计 6、数据库表设计 6.1、user表 6.2、roles表 7、Filter 拦截请求…

C++ —— 模板的基本概念和使用

目录 1.函数模板是什么 1.1函数模板的基本概念 1.2函数模板的基本使用 1.3函数模板的特化 1.4非类型模板参数 2.类模板是什么 2.1类模板的基本使用 2.2非类型模板参数 2.3类模板的特化 2.4模板特化后的优先级 3.函数模板不要分离编译 1.函数模板是什么 模板是一种…

python和MySQL的基础使用和数据的插入导出

一.基础使用第三方库pymysql除了使用图形化工具以外&#xff0c;我们也可以使用编程语言来执行SQL从而操作数据库。在Python中&#xff0c;使用第三方库:pymysql来完成对MySQL数据库的操作。安装创建到MySQL的数据库链接具体代码如下from pymysql import Connect #获取到MySQL数…

LVS+Keepalived+Nginx宏观整体结构与关键问答

视频链接&#xff1a;4-2 为什么要使用 LVS Nginx&#xff1f;_哔哩哔哩_bilibili ———————————————————————————————————————————————————————— 1. 问题&#xff1a; 为什么要使用LVS Nginx&#xff1f;&#xf…

C语言刮刮乐(掩码图的范例)

程序简介 这个程序模拟了刮刮乐的刮卡操作&#xff0c;按下鼠标左键并移动可以刮开刮卡层。 刮卡操作是通过掩码图实现的&#xff0c;一张隐藏的待刮开背景图&#xff0c;一张掩码图。 刮卡的时候&#xff0c;是在黑色的掩码图上画线&#xff0c;显示的时候&#xff0c;通过…

官方正品 | Ultralytics YOLOv8算法来啦(尖端SOTA模型)

&#x1f680;&#x1f680;&#x1f680;卷王之王 | Ultralytics YOLOv8 算法来啦&#xff01;&#xff01;✨✨✨ 一、前言简介 &#x1f384;&#x1f388; &#x1f4da; 代码地址&#xff1a;卷王之王 | YOLOv8代码下载地址 &#x1f4da; 详细文档&#xff1a;https://…

代码随想录算法训练营第十四天字符串 java :二叉树理论基础 144前序遍历 145后续遍历94 中序遍历

系列文章目录 第十一天笔记 文章目录系列文章目录前言1、二叉树理论基础1.1二叉树的种类1.1 如何区分二叉树的遍历方式1.2 如何定义二叉树节点2 递归遍历2.1**前序遍历 AC代码**2.2**后序遍历 AC代码**2.3 **中序遍历 AC代码**3 迭代法4 层次遍历总结**什么是List<List <…

组态王软件与S7-1200无线MODBUS通信方案详解

本方案是组态软件与西门子 S7-1200进行无线 MODBUS 通信的实现方法。此方案可以作为西门子 S7-1200与组态软件的无线 MODBUS 通信实例。在本方案中采用了西门子PLC专用无线通讯终端DTD434MC&#xff0c;作为实现无线通讯的硬件设备。 一、方案概述 组态王配置为标准 MODBUS 主…

基础面试问题

在Java中获取当前的工作目录System.getProperty("user.dir")public class Test {public static void main(final String[] args) {final String dir System.getProperty("user.dir");System.out.println("current dir " dir);} }获取一定范围…

Redis01之Windows版本的Redis安装配置

目录 0. 学习网址 https://www.w3cschool.cn/redis/https://www.w3cschool.cn/redis/ 1. Redis简介 2. 下载 3. 安装和配置 3.1 window(略...) 3.2 linux(CentOS) 4. Redis支持五种数据类型 5.通过命令操作redis 0. 学习网址 https://www.w3cschool.cn/redis/http…

一文搞懂CPU如何控制I/O设备

1 接口和设备&#xff1a;经典适配器模式 输入输出设备不只是一个设备。大部分输入输出设备&#xff0c;都有&#xff1a; 它的接口&#xff08;Interface&#xff09;实际的I/O设备&#xff08;Actual I/O Device&#xff09; 硬件设备并非直接接入到总线上和CPU通信&#…