附录10-JS正则

news2025/2/23 7:18:09

在JS中有多种内置方法可以使用正则表达式,比如说match,exec,test等

文章参考 第十四章 吃通js正则表达式,javascript前端工程师必会技能_哔哩哔哩_bilibili

目录

1  正则常用方法

1.1  exec的简单使用

1.1.1  基本使用

1.1.2  lastIndex属性

1.1.3  y模式

1.2  match的简单使用

1.3  test的简单使用

1.4  matchAll的简单使用

2  创建正则表达式对象

3  正则字符串内容

3.1  竖杠

3.2  括号

3.2.1  基本使用

3.2.2  数字表示括号

3.2.3  部分方法中代替括号

3.2.4  不记录组

3.2.5  给组起名

3.3  中括号

3.3.1  基本用法

3.3.2  横杠

3.4  点

3.5  加号

3.6  星号

3.7  尖号

3.7.1  开头标志

3.7.2  取反

3.8  美元符号

3.8.1  字符结尾

3.8.2  匹配内容前方,后方与本身

3.9  大括号

3.10  问号

3.10.1  0个或一个

3.10.2  禁止贪婪

3.11  右斜杠

3.11.1  将特殊字符转义为普通字符

3.11.2  数字

3.11.3  除了数字以外的所有字符

3.11.4  空白

3.11.5  除了空白以外的所有字符

3.11.6  字母,数字,下划线

3.11.7  除了字母,数字,下划线的所有字符

4  匹配模式

4.1  全局模式 g

4.2  不区分大小写模式 i

4.3  单行模式 s

4.4  字符属性模式

4.5  其他不常用的模式

5  一些例子

5.1  多行字符串转变为数组套对象

6  多个正则表达式匹配一个字符

7  断言匹配

7.1  确定后面是什么的断言匹配

7.2  确定前面是什么的断言匹配

7.3  后面不是什么的断言匹配

7.4  前面不是什么的断言匹配


 

1  正则常用方法

1.1  exec的简单使用

exec可以用于检索字符串中正则表达式的匹配,如果没有匹配会返回null

1.1.1  基本使用

我们在hello中寻找o

如果你匹配不到就会返回null

如果你在hello world中找l

你会获得index为2的l,也就是第0个l

我当前只想获取hello中的第二个l,那么我们可以这样写

数组的第一个值是从哪里找到的,第二个值是找到的l。首先找到的是hello,hello在hello world从第0位开始,所以index是0

如果你找的是world中的l,就这样写

这样得到的索引就是6

1.1.2  lastIndex属性

我们依然在hello world中找l,我们连续执行多次exec(),会发现指定的结果不一样

这里exec使用了正则对象的lastIndex属性,我们打印出来看一下

第一次从开始找,所以lastIndex是0,第二次找到的索引为2的l,所以下一次的lastIndex就是3,直到最后null的时候归零

  • 不加入全局模式(g)的时候,lastIndex永远是0
  • 可以自己定义lastIndex,从而控制从哪里开始找

1.1.3  y模式

y模式与g模式都是全局模式,g模式会在全局一直找,y模式当找到一个不是的就从头开始找

我们对比着看一下,先看g模式

g模式可以找到第三个l,我们再看y模式

y模式可以找到前面两个l,ll的后面是o,不符合正则的要求了,之后y模式就会再次从头找

1.2  match的简单使用

match在这里提到过 4.字符串型 string_Suyuoa的博客-CSDN博客 ,参数直接使用正则字符串

如果是全局搜索数组会有变化

1.3  test的简单使用

test用于检测字符串中有没有正则字符串中要的东西

如果有就是true

如果没有就是false

1.4  matchAll的简单使用

matchAll()必须配合g使用,结果会返回一个迭代器对象,遍历整个迭代器会得到每一个符合字符串的具体信息

在有的低版本浏览器中不支持matchAll,可以通过match实现matchAll,具体方法可以看一下这个,逻辑大致是用match先找一个,之后用其他的字符替换掉找到的字符,然后继续找,这样一个一个找就能找到最后了 35 为低端浏览器定义原型方法matchAll_哔哩哔哩_bilibili

也可以使用exec()与exec()带的属性lastIndex实现matchAll,具体方法可以看一下这个 36 使用exec完成全局匹配_哔哩哔哩_bilibili

2  创建正则表达式对象

可以用new RegExp()来创建正则表达式对象,第一个参数是正则表达式的内容,第二个参数是模式(g是全局模式)

3  正则字符串内容

3.1  竖杠

竖杠|表示 或 的意思

找到hello中的所有e和o

3.2  括号

3.2.1  基本使用

括号表示分组的意思,学名叫原子组,我们先看个例子

如果没分组的话就是 010 或 020\-\d{7,9}

  • -\d{7,9}是后面有一个横杠然后接7-9个数字

如果加了分组就是在字符串中 含有010或020,然后后面接一个横杠然后接7-9个数字

这样就是false了

3.2.2  数字表示括号

我们用\数字可以替代第几个括号

  • 上面的\1就代表h[1-6]

这样就可以匹配到上面的三个标题标签了

如果不进行全局搜索,结果会包含括号中的内容

3.2.3  部分方法中代替括号

在部分方法中也可以用$数字来代表第几组括号,比如下面把所有的h标签替换成p标签

如果使用函数可以传递自定义参数,自定义参数依次就是这些

第一个是完全找到的字符,之后是括号中的字符,之后是索引,然后是输入内容

我没有给返回值所以页面上显示的是undefined

给返回值就好了

会出现括号套括号的情况,你的索引情况是,外层的括号在前面,内层的括号在后面,比如下面这种情况就是 红括号索引<绿括号索引<蓝括号索引

3.2.4  不记录组

可以在括号内的最前部加上?: 表示不记录哪一组

但是在这个例子中不可以不记录第一组

3.2.5  给组起名

?<名称>命名,$<名称>调用

这样就会将匹配的内容换成第二个l

如果使用match方法会在结果中的group属性看到命名的组

3.3  中括号

3.3.1  基本用法

中括号内无论写多少内容都代表一个字符,中括号内所有字符呈 或 的关系

下面这个例子是在 192695348 找到 123456 中的任何一个字符

中括号中的特殊字符只表示其本身的意思

3.3.2  横杠

横杠表示跨度,横杠常于中括号配合,比如[A-Z]就是大写字母,[0-9]就是所有数字

  • 只能升序写,比如[9-0]这样写是无效的

如果要匹配数字或小写字母可以这样写 [0-9a-z]

3.4  点

点可以代表除换行外的任意字符

3.5  加号

加号可以表示加号前的一个字符重复一次或多次

我们把l+看做一个整体

3.6  星号

星号可以表示星号前的一个字符重复0次或多次

我们把3*看做一个整体

3.7  尖号

3.7.1  开头标志

尖号表示以下一个字符为开始的字符

如果不加尖号就是查询字符串中有没有123

如果加了尖号则代表必须以123开头,结果才能为true

如果尖号在中括号中是取非的意思,下面这个例子就是除了123的所有字符

3.7.2  取反

在中括号内如果加上尖号表示取反

如果不加尖号表示找到所有的l,如果加上尖号表示找到除了l的所有字符

3.8  美元符号

3.8.1  字符结尾

$符号表示必须以$前的字符结尾

如果123不在结尾就会返回false

3.8.2  匹配内容前方,后方与本身

用$`来代替匹配内容前面的内容,$'来替代匹配内容后面的内容,\$&来匹配内容本身的内容

  • `是ESC下面的按键,'是单引号

匹配到第一个l,将第一个l替换为 $&(本身)+哈哈哈

匹配到第一个l,将第一个l替换为$`(第一个l之前的内容,也就是he)+哈哈哈

匹配到第一个l,将第一个l替换为$'(第一个l之后的内容,也就是lo)+哈哈哈

3.9  大括号

大括号表示后面跟几个上一个类型的

比如下面检测字符串中,字符b到字符末尾,是否只存在3-5个数字

如果多加了几个数字就为false

大括号一般不在最后写,如果在最后写就表明字符b的后面有没有3-5个数字,如果数字比5个多也会判断为true

如果比3个少就是false了

可以不给逗号及逗号后面值,让其匹配固定个数

如果使用match会按照你给的最大数量进行匹配,在下面这个例子中并不会只匹配一个就停止

逗号后面可以不给值,不给值在这个例子中就表示一个到无数个

3.10  问号

3.10.1  0个或一个

问号表示前面的字符可以有也可以没有(0个或1个)

比如我现在有两个url,一个是http协议,一个是https协议,这两种协议我们都能接收,所以就可以这样写

3.10.2  禁止贪婪

默认情况下会尽可能多的进行匹配

就是你写3到6个,它会给你匹配6个而不是匹配3个

在表示范围的后面加一个问号就只会匹配3个而不是匹配6个

除了大括号,星号,加号这种表示数量的符号加上问号后都会尽可能少的匹配

3.11  右斜杠

右斜杠代表转义字符

3.11.1  将特殊字符转义为普通字符

比如我想找到(1234)中的括号,这个时候就得在括号前加一个右斜杠

3.11.2  数字

\d代表数字

3.11.3  除了数字以外的所有字符

\D代表除了数字以外的所有字符

3.11.4  空白

用\s表示空白。空格,制表符,换行符都算是空白

123后面我敲了一个tab,345后面我敲了两个空格

3.11.5  除了空白以外的所有字符

用\S表示除了空白以外的所有字符。空格,制表符,换行符都算是空白

 

3.11.6  字母,数字,下划线

用\w表示字母,数字,下划线

3.11.7  除了字母,数字,下划线的所有字符

用\W表示除了字母,数字,下划线的所有字符

4  匹配模式

匹配的模式可以混着用,也可以单独用

4.1  全局模式 g

现在我们想找到字符串里的所有数字,那么像下面这样写就只会找到第一个数字

在正则的内容最后加上g可以进行全局搜索

这样就可以找到所有要找的字符了

4.2  不区分大小写模式 i

如果不添加i只能找到指定的字符

如果添加了i就是不区分大小写

4.3  单行模式 s

点是不能匹配换行符的,使用单行模式就会将换行符当成一个普通的字符进行匹配

4.4  字符属性模式

我做个例子

这里面要替换的只有大括号中的L,具体换成什么可以参考这个 正则表达式系列之 —— Unicode:修饰符 "u" 和类 \p{...}_LeviDing的博客-CSDN博客

有几个常用的

  • 中英文 L
  • 标点符号 P
  • 中文 sc='Han'

还有就是宽字符的时候需要用到u

4.5  其他不常用的模式

  • m 每一行单独处理
  • y 发现不对就从头开始模式,在上面的exec中介绍过

5  一些例子

5.1  多行字符串转变为数组套对象

6  多个正则表达式匹配一个字符

我现在有两个条件

  1. 输入内容必须以字母或数字开头,且数字和字母为5-10位
  2. 输入内容中必须包含大写字母

  • 可以在regs数组中加入若干个正则条件

如果输入的值不符合就会显示错误

符合就会显示正确

7  断言匹配

7.1  确定后面是什么的断言匹配

我们现在想找到l后紧跟一个d的l

7.2  确定前面是什么的断言匹配

我们想找到hello world中前面是r的l

  • 注意(?<=r)要写在前面不要写在后面

7.3  后面不是什么的断言匹配

我们现在想找到后面不是空格的o字符

7.4  前面不是什么的断言匹配

我们现在找前面不是l的o

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

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

相关文章

Android Activity跳转

实现点击按钮&#xff0c;发送消息并跳转到另一个Activity MainActivity添加SendMessage方法 const val EXTRA_MESSAGE "com.example.myfirstapp.MESSAGE"class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super…

【C++】string的使用

文章目录一、前言二、标准库中的string类三. string类的常用接口1. 构造函数2. 容量操作3. 访问遍历4. 修改操作5. 其他操作一、前言 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0…

ubuntu18.04服务搭建yolov5开发环境

文章目录1. 系统和显卡信息2. 下载安装CUDA2.1 1cuda环境变量配置1. 系统和显卡信息 &#xff08;1&#xff09; 系统信息 kanditelpo-System-Product-Name:~$ cat /proc/version Linux version 4.15.0-191-generic (builddlcy02-amd64-032) (gcc version 7.5.0 (Ubuntu 7.5.…

PDF如何转Word?分享几个实用办公软件给你

PDF是我们常用的文件格式&#xff0c;因为它的兼容性好&#xff0c;在手机、电脑查看文件都不影响文件的格式与内容。并且它的保密性也好&#xff0c;因为它无法在线更改文件内容&#xff0c;但这也说明了&#xff0c;我们如果需要对其进行更改的话&#xff0c;将需要把PDF格式…

解决Vue3中echarts无法缩放的问题

这里写自定义目录标题前言问题描述官网示例正常官网示例在本地缩放异常灵光乍现问题解决前言 实际工作中&#xff0c;使用到vue和echarts技术。项目原来用的vue2echarts4&#xff0c;后来更新到了vue3echarts5&#xff0c;结果遇到echarts无法绽放的问题。 问题描述 官网示例…

PDF、Word、Excel文件前端预览实操干货都在这!

随着Odoo在各个行业领域的深入应用&#xff0c;对Odoo的前端交互体验要求也越来越高。 我们在项目开发中常常会遇到&#xff0c;需要上传文件并预览的问题。 这里是我遇到的需求&#xff0c;并完成的一个小demo。 在Odoo中实现文件上传 首先我们需要在qweb页面中加入上传的…

Chrome浏览器插件开发v3版本第二篇:改变页面布局案例

跟着官方教程走才是硬道理&#xff1a;https://developer.chrome.com/docs/extensions/mv3/getstarted/tut-focus-mode/ 老规矩&#xff0c;搭建基本的项目结构&#xff1a;创建一个manifest.json文件 {"manifest_version":3,"name":"Focus",&…

[附源码]Python计算机毕业设计宠物销售管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

SQL Server中row_number函数用法介绍

一、SQL Server Row_number函数简介 ROW_NUMBER()是一个Window函数&#xff0c;它为结果集的分区中的每一行分配一个连续的整数。 行号以每个分区中第一行的行号开头。 语法实例&#xff1a; select *&#xff0c;row_number() over(partition by column1 order by column2)…

PaddlePaddle飞浆搭建和机器学习文字识别

PaddlePaddle飞浆搭建和机器学习文字识别 文章转自&#xff1a;https://lingkang.top/archives/paddlepaddle-fei-jiang-da-jian-he-ji-qi-xue-xi-wen-zi-shi-bie 官网&#xff1a;https://www.paddlepaddle.org.cn/ 飞桨&#xff08;PaddlePaddle&#xff09;以百度多年的深…

第七章:Springmvc中applicationContext.xml配置文件应用上下文详解

主要配置程序的总体用上下文&#xff0c;让容器对全局掌握来龙去脉 1.扫描所有项目的包名 2.配置项目所有的静态资源映射 3.配置请求方法的映射驱动 4.配置适配器适配RequestMapping注解标注的Handler&#xff08;HandlerMethod类型&#xff09; 5.配置消息转换器决定浏览器以什…

Unity游戏Mod/插件制作教程04 - 如何创建配置文件

ConfigEntry<T> 在插件功能的设计中&#xff0c;经常会有需要玩家自己配置的东西&#xff0c;比如插件的各种设置&#xff0c;快捷键的分配等。在BepInEx中&#xff0c;提供了一个ConfigEntry类简化了配置操作。 我们来看一段示例&#xff1a; (注:由于阿B在代码页中会…

Docker的网络模式

一、Docker网络 1.1 Docker网络实现原理 docker 使用linux 桥接&#xff0c;在宿主机虚拟一个docker 容器网桥&#xff08;docker0) &#xff0c;docker 启动一个容器时会根据docker 网桥的网段分配给容器一个IP地址&#xff0c;称为Container-IP&#xff0c;同时Docker 网桥…

JAVA接入OPC DA2.0引发的问题

背景&#xff1a; JAVA接入OPC DA后&#xff0c;在生产环境跑了一段时间后就会出现异常&#xff0c;给折腾的够呛&#xff0c;起初的报错还能通过重启OPC连接解决&#xff0c;后来强制重新连接也不行&#xff0c;最终一套测试下来&#xff0c;除非重启OPC服务器&#xff0c;别…

生产制造企业数字化转型:流程制造ERP

ERP的含义是企业资源计划&#xff0c;含义是对企业所拥有各种资源进行综合规划和优化管理&#xff0c;用以降低成本&#xff0c;提高效率&#xff0c;增加利润。ERP最初是在90年代初提出的&#xff0c;那时的ERP概念&#xff0c;还只是根据计算机技术的发展和供需链管理,推论各…

[附源码]java毕业设计校园闲置物品租赁系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

深度学习——动物数据集大合集(附下载地址)

说明&#xff1a;部分数据收费&#xff0c;付费后数据请关注私信内容&#xff0c;会给出下载链接&#xff0c;亲测数据质量不错&#xff0c;如下图所示&#xff1a; ​ 1、30种常见鱼类数据集 数据集介绍&#xff1a;30种常见鱼类数据集&#xff08;每类鱼30-100张图片不等&am…

丰田+比亚迪「围攻」大众,明年或将「让出」榜首之位

大众&#xff0c;正在经历最艰难的时刻。 高工智能汽车研究院监测数据显示&#xff0c;今年1-10月&#xff0c;大众集团旗下大众品牌乘用车在中国市场的交付上险同比下滑11.5%&#xff0c;而作为老对手&#xff0c;排名第二的丰田&#xff0c;则是同比增长13.72%。 豪华品牌部…

Oracle快速入门 | 黑马

简介 概述 Oracle目前使用最广的大型数据库管理系统&#xff0c;作为分布式数据库实现分布式处理功能。 广泛用于金融行业&#xff0c;大量数据而且需要很安全 特点 支持多用户&#xff0c;大事务量的事务处理数据安全性和完整性控制&#xff08;主要卖售后的&#xff0c…

信息安全工程实践笔记--Day1 信息收集漏洞扫描

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录实验目标&#xff08;一&#xff09;信息收集一、搜索引擎二、域名1.whois 查询2.子域名查询3.真实ip(1)什么是cdn&#xff1f;(2) 如何验证目标服务器是否挂载cdn&a…