JS -正则表达式

正则表达式

关于正则表达式,其实我写过几篇了,但是真正的正则表达式其实主要用于定义一些字符串的规则,计算机根据给出的正则表达式,来检查一个字符串是否符合规则。
我们来看一下,在JS中如何创建正则表达式对象。

语法

第一种创建方式

var 变量 =  new RegExp("正则表达式", "匹配模式");

记得在使用typeof检查正则对象会返回一个Object对象。第二个参数有两个特殊的值:
i 忽略大小写 例如 : var reg= new RegExp("a","i"); = var reg2=/a/i;
g 全局匹配模式

例如:

    var reg = new RegExp("a");//这个正则表达式可以用来检查一下字符串中是否含有a,正则表达式中区分大小写字母
    console.log(typeof reg);
    var str="azdaszxc";
    var result =reg.test(str);
    console.log(result);//结果输出是true,即符合表达式

在这里插入图片描述

第二种创建方式

使用正则表达式字面量,将正则表达式包含在斜杠/ 中。

let regex = /pattern/;

例如:

/*
     *var 变量 = new RegExp("正则表达式","匹配模式");
     *var 变量=/正则表达式/匹配模式
     */
    var reg= new RegExp("a","i");
    console.log(reg.test("abc"));
    var reg2=/a/i;
    console.log(reg2.test("abc"));
    //这两种方法都是一样的效果

    //创建一个正则表达式,检查一个字符串中是否有a或者b
    //使用|表示或者的意思 例如/a|b/,里面可以加入多个|,不局限于数量
    var reg3=/a | b/i;
    console.log(reg.test("wea"));

    //创建一个正则表达式检查一个字符串中是否有字母
    //笨办法1  var reg=/a|b|c|d|e|f|g|h|i|j|k等等/i
    //笨办法2 var reg=/[abcdefg等等]/i 这样也表示a或者b或者c等等
    //[a-z]任意小写字母
    //[A-Z]任意大写字母
    //[A-z]任意字母
    //[]表示或者
    //[^ ]表示除了,即判断字符串中是否有除开指定参数的其他参数,有的话就输出true
    var reg4=/[0-9]/i;
    console.log(reg4.test("AISUDOHAasda415641785722132531531534sdasdaOUIFNUIASDHDFUASOI"));

    //检查一个字符串中是否含有abc或者adc或者aec
    //因为开头都是a结尾都是c,所以可以用如下办法
    var reg5=/a[a-z]c/i;
    console.log(reg5.test("aac"));

在这里插入图片描述

测试匹配:

  • 使用 test() 方法来测试字符串是否与正则表达式匹配,返回布尔值。
  • 例如:let isMatch = regex.test(str);

查找匹配:

  • 使用 match() 方法来查找字符串中与正则表达式匹配的部分,返回匹配结果的数组。
  • 例如:let matches = str.match(regex);
//match()
    //可以根据正则表达式,从一个字符串中奖符合条件的内容提取出来
    //默认情况下match()方法只会找到第一个符合要求的内容,找到后就会停止检索
    //我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容
    //可以为一个正则表达式设置多个匹配模式,而且输入指定模式的字符顺序无,比如ig或者gi皆可以
    //match()会将匹配到的内容封装到一个数组中,即使只查询到一个结果
    var result3=str.match(/[a-z]|[0-9]/gi);//在后面加一个g,设置为全局匹配模式
    //增加一个i,就表示忽略大小写,这样就可以也输出大写字母
    console.log(result3);//这样就可以输出字符串中所有符合条件的内容
    console.log(result3[2]);//输出result3这个数组中的第三个元素,也就是2
    console.log(result3[3]);//输出result3这个数组中的第四个元素,也就是b
    //如果不设置为全局匹配模式,那么就只能输出第一个符合要求的内容
    //如果在检索条件中增加一个[0-9]值域,那么字符串中的数字也可以检索出来

替换匹配:

  • 使用 replace() 方法来替换字符串中与正则表达式匹配的部分,返回替换后的新字符串。
  • 例如:let newStr = str.replace(regex, replacement);
//replace()
    //可以将字符串中的指定内容替换为新的内容
    //括号中有两个参数,第一个参数是被替换的内容,第二个参数是新的内容
    var result4 =str.replace("a","###");
    console.log(result4);
    //也可以使用值域来进行替换
    var result5 =str.replace(/[0-9]/g,"数字");//通过值域来对指定对象进行替换,把0-9所有的数字全部替换成汉字“数字”
    console.log(result5);
    //也可以使用空串来对指定内容进行剔除,比如删除str字符串中的所有英文字母
    var result6 =str.replace(/[a-z]/gi,"");
    console.log(result6);

切割字符串:

  • 使用 split() 方法来根据正则表达式将字符串切割成数组。
  • 例如:let arr = str.split(regex);
  var str="1a2b3c4d5e6f7UZHCUIAE";
    //split()可以将一个字符串拆分为一个数组
    var result=str.split(/[a-z]/gi);//依靠正则语法的类似格式来给split()拆分字符设置关键字符或者关键字符范围
    //这个方法即使不设定全局匹配模式,也会全部拆分
    console.log(result);

修饰符:

  • 正则表达式可以使用修饰符来改变匹配的行为,如 i(忽略大小写)、g(全局匹配)和 m(多行匹配)等。
  • 例如:let regex = /pattern/gi;

元字符和字符类:

  • 正则表达式中的元字符和字符类用于匹配特定的字符或字符集合,如 .(匹配任意字符)、\d(匹配数字字符)和 [abc](匹配字符 a、b 或 c)等。
  • 例如:let regex = /\d+/;

量词:

  • 正则表达式中的量词用于指定匹配的次数,如 *(零次或多次)、+(一次或多次)和 ?(零次或一次)等。
  • 例如:let regex = /\d{2,4}/;
    //创建一个正则表达式检查一个字符串里面是否含有aaa
    var reg=/aaa/;
    console.log(reg.test("aaabbc"));
    //重复写有些繁琐,就可以通过量词设置一个内容出现的次数
    //{n}表示重复n次
    //{m,n}表示重复m-n次
    //{m,}表示重复m次以上
    var reg2=/a{3}/i;
    //除了设置量词之外,还可以额外设置匹配模式,比如全局匹配或者是否忽略大小写
    console.log(reg2.test("aaAbbc"));
    //量词只他前边的一个内容起作用
    //例如 bc{3}指的是bccc而不是bcbcbc
    var reg3=/bc{3}/;
    console.log(reg3.test("bcbcbc"));//控制台显示错误,因为检查的字符串是bccc
    console.log(reg3.test("bccc"));//控制台显示正确,因为检查的字符串是bccc
    //可以用()来锁定量词的内容
    var reg4=/(bc){3}/;
    console.log(reg4.test("bcbcbc"));//控制台显示正确,因为检查的字符串是bcbcbc
    //量词衍生使用
    var reg5=/ab{1,4}c/;//这样表示b的数量是1-4个,所以abc abbc abbbc abbbbc这四个都可以
    console.log(reg5.test("abc"));
    console.log(reg5.test("abbc"));
    console.log(reg5.test("abbbc"));
    console.log(reg5.test("abbbbc"));

    var reg6=/ab{4,}c/;//表示中间的b的数量是四个或者四个以上
    console.log(reg6.test("abbc"));//控制台输出错误
    console.log(reg6.test("abbbc"));//控制台输出错误
    console.log(reg6.test("abbbbc"));//控制台输出正确
    console.log(reg6.test("abbbbbbbc"));//控制台输出正确

    //n+ 匹配任何包含至少一个n的字符串
    //n+ 相当于n{1,}即数量大于等于一的n的字符串
    var reg7=/ab+c/;
    console.log(reg5.test("ac"));//控制台输出错误,因为没有b
    console.log(reg7.test("abc"));//控制台输出正确,因为有b
    console.log(reg7.test("abbc"));//控制台输出正确,因为有bb
    console.log(reg7.test("abbbc"));//控制台输出正确,因为有bbb
    //至少包含一个ab就能够输出正确,多个ab不影响输出结果
    
    //n* 相当于n{0,}即数量大于等于领的n的字符串
    var reg8=/ab*c/;
    console.log(reg8.test("ac"));//控制台输出正确,因为没有b也可以
    console.log(reg8.test("abc"));//控制台输出正确,因为有b
    console.log(reg8.test("abbc"));//控制台输出正确,因为有bb
    console.log(reg8.test("abbbc"));//控制台输出正确,因为有bbb

    //n? 0个或者1个,相当于{0,1}即数量是0-1个
    var reg9=/ab?c/;
    console.log(reg9.test("ac"));//控制台输出正确,因为没有b也可以
    console.log(reg9.test("abc"));//控制台输出正确,因为有一个b
    console.log(reg9.test("abbc"));//控制台输出错误,因为有连个b
    console.log(reg9.test("abbbc"));//控制台输出错误,因为三个b

    //检查一个字符串是否以a开头
    // ^表示开头
    //比如 /^a/
    var reg10=/^a/;
    var reg11=/c$/;
    console.log(reg10.test("ab"));//控制台输出正确,因为开头是a
    console.log(reg10.test("bc"));//控制台输出错误,因为开头不是a
    console.log(reg10.test("abc"));//控制台输出正确,因为开头是a
    console.log(reg10.test("bcd"));//控制台输出错误,因为开头不是a
    console.log(reg11.test("ab"));//控制台输出错误,因为结尾是b
    console.log(reg11.test("bc"));//控制台输出正确,因为结尾是c
    console.log(reg11.test("abc"));//控制台输出正确,因为结尾是c
    console.log(reg11.test("bcd"));//控制台输出错误,因为结尾是d

    //如果同时使用开头和结尾
    var reg12=/^a$/;
    console.log(reg12.test("aa"));//控制台输出错误,因为开头的a和结尾的a不是同一个
    console.log(reg12.test("a"));//控制要输出正确,因为检索的a即是开头也是结尾

    //如果使用或语句
    var reg13=/^a|a$/;
    console.log(reg13.test("a"));//控制台输出正确,因为开头或者结尾是a
    console.log(reg13.test("aa"));//控制台输出正确,因为开头或者结尾是a

    //创建一个正则表达式,用来检查一个字符串是否是手机号
    //手机号的规则
    //1.以1开头
    //2.第二位数字是3-9
    //3.三位以后包括三位的数字可以使0-9任意一个
    var mobilephoneStr="15697955165";
    var mobilephoneStr2="18365445708";
    var reg14=/^1[3-9][0-9]{9}$/;
    console.log(reg14.test(mobilephoneStr));//控制台输出为true,符合条件
    console.log(reg14.test(mobilephoneStr2));//控制台输出为true,符合条件
    console.log(reg14.test("11011011011"));//控制台输出为fals,不符合手机号的规则

在这里插入图片描述

    //检查一个字符串中是否含有.
    //.表示任意字符
    var reg=/./;
    console.log(reg.test("ahduads"));//.表示任意字符,所以不管内容是什么,控制台输出都是true
    
    //在正则表达式中用\作为转义字符
    //\.来表示.
    //同理 \\表示\
    var reg2=/\./;
    console.log(reg2.test("agbuidashduia"));//字符串中没有.,所以控制台输出false
    console.log(reg2.test("asdasd.asdasd"));//字符串中有.,所以控制台输出true
    var reg3=/\\/;
    console.log(reg3.test("b\\"));//要在字符串中输入\,必须输入\\
    
    //使用构造函数时,由于他的参数是一个字符串,而\是字符串中转义字符
    //如果要使用\则需要使用\\来代替
    var reg4 =new RegExp("\\.");//这样的字符串表示检索是否有.
    console.log(reg4.test("asd"));//字符串中没有.,所以输出false
    console.log(reg4.test("ad.asd"));//字符串中有.,所以输出true

    // \w 任意字母、数字以及下划线_ [A-z0-9_]
    var reg4=/\w/;
    console.log(reg4.test("abc"));
    console.log(reg4.test("ABC"));
    console.log(reg4.test("123"));
    console.log(reg4.test("___"));
    //以上输出都是ture,可以使大写字母也可以是小写字母,还可以是数字和下划线_

    // \W 跟\w相反,除了字母、数字以及下划线_ [^A-z0-9_] 这里的^表示除了
    var reg5=/\W/;
    console.log(reg5.test("!@#$%^^*&**%"));
    console.log(reg5.test("abc"));
    console.log(reg5.test("ABC"));
    console.log(reg5.test("123"));
    console.log(reg5.test("___"));
    //第一个输出true,后面几个全部输出false。除了字母、数字以及下划线_,其余的都输出true

    // \d 表示任意数字 [0-9]
    // \D 表示除了数字 [^0-9]
    // \s 表示空格 
    // \S 表示除了空格

    // \b 表示边界 \B 表示除了单词边界
    var reg6=/\bchild\b/;
    console.log(reg6.test("hell child"));//控制台输出true
    console.log(reg6.test("hello children"));//控制台输出false
    // \bchild\b 表示搜索child这个单词,并且要存在边界

在这里插入图片描述

案例匹配电子邮件

    //电子邮件
    //格式根据网站要求定制
    //例如 任意字母数字下划线(三个起步).任意字母数字下划线@任意字母数字.任意字母(2-5).任意字母(2-5)
    // \w{3,} (\.\w+)* @ [A-z0-9]+  (\.[A-z]{2,5}){1,2}
    // +表示一次或者一次以上,*表示可有可无
    var emailReg=/\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}/;
    console.log(emailReg.test("2299999995@qq.com"));
    console.log(emailReg.test("xahsad.whahhs@123.com"));

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML:PC和手机的自适应图形布局样例

作者:私语茶馆 1.前言 有时我们需要开发一个自适应PC和手机的HTML页面,由于屏幕大小不同,会涉及到自动部署。W3School提供了一个非常好的案例:Responsive Image Gallery。本文利用独立CSS文件详细介绍一下这个案例。 2.案例详细介绍 2.1.Project项目文件结构 企业级项目…

电脑问题快速判断

电脑开机没有任何反应 检查电源 检查电源是否有问题或损坏,可以短接方法检测 板电源卡口对自己接第四或第五根线,若风扇匀速转动,电源无问题,若不转动或转一下停一下,电源有问题 检查内部连线 确保主板上的线插的…

Docker常用命令(镜像、容器、网络)

一、镜像 1.1 存出镜像 将镜像保存成为本地文件 格式&#xff1a;docker save -o 存储文件名 存储的镜像docker save -o nginx nginx:latest 1.2 载入镜像 将镜像文件导入到镜像库中 格式&#xff1a;docker load < 存出的文件或docker load -i 存出的文件…

蓝桥杯2024年第十五届省赛真题-小球反弹

以下两个解法感觉都靠谱&#xff0c;并且网上的题解每个人答案都不一样&#xff0c;目前无法判断哪个是正确答案。 方法一&#xff1a;模拟 代码参考博客 #include <iostream> #include <cmath> #include <vector>using namespace std;int main() {const i…

Axure实现tab页面切换功能

1. 实现效果 2. 实现原理 创建两个标签&#xff0c;并实现点击时选中状态点击时&#xff0c;设置面板状态 3. 实现步骤 3.1 实现可切换的标签 在页面上拖拽两个矩形作为两个tab标签&#xff0c;并命名 tab1 和 tab2 设置每个矩形的边框显示&#xff0c;只显示下边框即可 …

Flutter 上架如何解决 ITMS-91053 问题

最近&#xff0c;我的 Flutter App 发布到 TestFlight 后&#xff0c;就会收到一封邮件&#xff1a;The uploaded build for YOUR APP has one or more issues. 上面的邮件主要是说&#xff0c;我的 App 缺少了调用 API 的声明&#xff0c;以前从来没看到过&#xff0c;上网一查…

WEB攻防-ASP中间件IIS文件上传解析安全漏洞

漏洞原理&#xff1a; 基于文件 IIS6.0默认不解析;号后面的内容&#xff0c;例如1.asp;.jpg会当成1.asp解析&#xff0c;相当于分号截断。 基于文件夹 IIS6.0会将/*.asp/文件夹下的文件当成asp解析。 案例&#xff1a; 写一个木马文件&#xff0c;并改为jpg后缀 GIF89agif8…

宁盾LDAP统一用户认证与单点登录:构建高效安全的企业身份认证

在信息化时代&#xff0c;企业面临着众多的应用系统和数据资源&#xff0c;如何有效地管理和保护这些资源&#xff0c;确保信息安全和高效利用&#xff0c;成为了企业信息化建设的核心问题。LDAP统一用户认证和单点登录&#xff08;SSO&#xff09;作为一种高效、安全的身份验证…

windows与linux搭建svn环境并自动更新代码

SVN搭建以及自动更新代码 目录 一、windows安装svn并且转成中文 第1步&#xff1a;先下载安装包如下下面是语言包与安装包 第2步&#xff1a;双击安装包一直点击下一步即可 第3步&#xff1a;双击安装中文语言包 第二步&#xff1a;勾选设置语言包 二、linux安装svn 第1步…

pycharm远程连接server

1.工具–部署–配置 2.部署完成后&#xff0c;将现有的项目的解释器设置为ssh 解释器。实现在远端开发 解释器可以使用/usr/bin/python3

构建安全高效的前端权限控制系统

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

GDPU unity游戏开发 碰撞体与关节

让你设计的角色跑起来吧&#xff0c;可以是动画&#xff0c;也可以是碰撞器的运动。 运动小车 找到小车素材&#xff0c;导入到层级面板。然后可以新建一个地面让小车在上面运动&#xff0c;新建一个方块当障碍物。 摆放好后&#xff0c;要加组件。记住&#xff0c;在unity中运…

idea上传项目到gitee(码云)

1、打开码云&#xff0c;新建仓库 2、创建 3、这就是创建成功的页面 4、复制仓库地址&#xff0c;后面需要用到 2、打开我们的项目&#xff1a;例如我现在的项目 1、idea创建git仓库 2、选择我们项目文件夹的目录 3、查看文件是否变色&#xff0c;变色表示成功了 4、添加到缓…

unity cinemachine相机 (案例 跟随角色移动)

安装相机包 打开包管理工具 在 unity registry 搜索cinemachine 会在maincamera中生成一个组件cinemachineBrain 只能通过虚拟相机操控 主相机 虚拟相机的参数 案例 1.固定相机效果 位置 在固定的地方 默认的模式 2.相机跟随人物效果 焦距设置 20 跟随设置 把playere…

10.MMD 室内场景导入背景视频和灯光

导入背景视频 1. 导入人物和场景 场景是Akali’s room&#xff0c;可以在墙壁上添加视频 先添加主场景 2. 修改视频文件格式 在背景里选择导入背景视频文件 需要将mp4视频格式转化为AVI格式 方法一 先将视频导入格式工厂 点击配置 将视频编码改成DivX 再开始处理 …

【解决NodeJS项目无法在IDEA中调试的问题】使用JetBrains IDEA 2023 调试nodejs项目

项目采用Ant Design Pro React&#xff0c;使用前后端分离开发方式&#xff0c;后端可以很容易的打断点调试&#xff0c;但是前端通过网页进行调试&#xff0c;在IDEA中加了调试断点&#xff0c;但是没有什么用处。 解决方案如下&#xff1a; 点击新建运行配置 新建JavaScrip…

BERT-CRF 微调中文 NER 模型

文章目录 数据集模型定义数据集预处理BIO 标签转换自定义Dataset拆分训练、测试集 训练验证、测试指标计算推理其它相关参数CRF 模块 数据集 CLUE-NER数据集&#xff1a;https://github.com/CLUEbenchmark/CLUENER2020/blob/master/pytorch_version/README.md 模型定义 imp…

李沐60_机器翻译数据集——自学笔记

!pip install d2limport os import torch from d2l import torch as d2l下载和预处理数据集 在这个将英语翻译成法语的机器翻译问题中&#xff0c; 英语是源语言&#xff08;source language&#xff09;&#xff0c; 法语是目标语言&#xff08;target language&#xff09;。…

交互式探索微生物群落与生态功能的关系

微生物群落在生态系统中发挥则重要功能&#xff0c;我们在对微生物群落进行分析时&#xff0c;会将不同分类水平&#xff08;从门到属&#xff09;的微生物类群的相对丰度与测定的某一生态功能进行相关性分析。但由于微生物类群数较多&#xff0c;又有不同的分类水平&#xff0…

DeepFaceLab小白教程:视频换脸过程

合适那些人阅读&#xff1f; 适合从未使用过DeepFaceLab的群体。 如果你想基于DeepFaceLab完成一次视频换脸的操作&#xff0c;可以看本篇。 下载方式 GitHub https://github.com/iperov/DeepFaceLab 我是用motrix下载。 网盘 https://pan.baidu.com/share/init?surlO4…