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]任意字母//[]表示或者//[^ ]表示除了,即判断字符串中是否有除开指定参数的其他参数,有的话就输出truevar 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这个数组中的第三个元素,也就是2console.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}/;
    //创建一个正则表达式检查一个字符串里面是否含有aaavar 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而不是bcbcbcvar reg3=/bc{3}/;console.log(reg3.test("bcbcbc"));//控制台显示错误,因为检查的字符串是bcccconsole.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"));//控制台输出错误,因为没有bconsole.log(reg7.test("abc"));//控制台输出正确,因为有bconsole.log(reg7.test("abbc"));//控制台输出正确,因为有bbconsole.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"));//控制台输出正确,因为有bconsole.log(reg8.test("abbc"));//控制台输出正确,因为有bbconsole.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"));//控制台输出正确,因为有一个bconsole.log(reg9.test("abbc"));//控制台输出错误,因为有连个bconsole.log(reg9.test("abbbc"));//控制台输出错误,因为三个b//检查一个字符串是否以a开头// ^表示开头//比如 /^a/var reg10=/^a/;var reg11=/c$/;console.log(reg10.test("ab"));//控制台输出正确,因为开头是aconsole.log(reg10.test("bc"));//控制台输出错误,因为开头不是aconsole.log(reg10.test("abc"));//控制台输出正确,因为开头是aconsole.log(reg10.test("bcd"));//控制台输出错误,因为开头不是aconsole.log(reg11.test("ab"));//控制台输出错误,因为结尾是bconsole.log(reg11.test("bc"));//控制台输出正确,因为结尾是cconsole.log(reg11.test("abc"));//控制台输出正确,因为结尾是cconsole.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"));//控制台输出正确,因为开头或者结尾是aconsole.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"));//字符串中没有.,所以控制台输出falseconsole.log(reg2.test("asdasd.asdasd"));//字符串中有.,所以控制台输出truevar reg3=/\\/;console.log(reg3.test("b\\"));//要在字符串中输入\,必须输入\\//使用构造函数时,由于他的参数是一个字符串,而\是字符串中转义字符//如果要使用\则需要使用\\来代替var reg4 =new RegExp("\\.");//这样的字符串表示检索是否有.console.log(reg4.test("asd"));//字符串中没有.,所以输出falseconsole.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"));//控制台输出trueconsole.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"));

在这里插入图片描述

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

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

相关文章

第67天:APP攻防-Frida反证书抓包移动安全系统资产提取评估扫描

思维导图 案例一:内在-资产提取-AppinfoScanne AppinfoScanner 一款适用于以 HW 行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具,可以帮助渗透测试工程师、攻击队成员、红队成员快速收集到移动端或者静态 WEB …

【禅道客户案例】小反馈,大杠杆!银丰新融「反馈管理」优秀实践

企业介绍 北京银丰新融科技开发有限公司(简称:银丰新融)成立于2000 年,自创立以来一贯专注于金融监管、风险管控等领域的信息系统建设,拥有目前国内金融风险领域规模庞大的信息技术服务团队。 银丰新融业务范围覆盖了…

VUE3 ref,props,生命周期

1.--ref属性 1.1代码 1.1.1子表 <template><div class"person"><h1>中国</h1><h2 ref"title2">北京</h2><h3>尚硅谷</h3><button click"showLog">点我输出h2这个元素</button>&l…

JavaScript注释:单行注释和多行注释详解

为了提高代码的可读性&#xff0c;JS与CSS一样&#xff0c;也提供了注释功能。JS中的注释主要有两种&#xff0c;分别是单行注释和多行注释。 在编程的世界里&#xff0c;注释是那些默默无闻的英雄&#xff0c;它们静静地站在代码的背后&#xff0c;为后来的维护者、为未来的自…

到底什么是爬虫

1. 引言 在数据驱动的世界里&#xff0c;网络爬虫&#xff08;Web Crawling&#xff09;技术扮演着获取和处理网上数据的关键角色。无论是为了数据分析、机器学习项目的数据集构建还是简单地监测网页变化&#xff0c;学习如何创建一个基本的网页爬虫可以大大提升你的工作效率和…

Vue页面生成导出PDF文件

第一种&#xff1a; 使用浏览器自带打印方法window.print(); 也可使用print-js插件&#xff08;原理相同&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>printDemo</title> </…

【Vue】常见的七大属性(描述+案例)

一、前言 最近&#xff0c;因为项目需要自己就去学习了一下Vue的相关知识&#xff0c;自己花了几天&#xff0c;结合官方文档和相应的视频学习了一下Vue,了解了Vue大概的一些属性&#xff0c;方法&#xff0c;特点等。接下来博主会将自己学习的相关内容通过博客的形式进行记录…

Linux蓝牙驱动模拟HID设备(把Linux系统模拟成蓝牙鼠标和蓝牙键盘)

by fanxiushu 2024-04-24 转载或引用请注明原始作者。 在经过windows的蓝牙驱动开发模拟成HID设备的大风大浪之后&#xff0c; 现在回到linux下实现相同功能&#xff0c;简直就是如小孩嬉闹一样的轻松。 但无论如何&#xff0c;作为模拟蓝牙HID设备的windows&#xff0c;linux一…

【学习】​CSMM和CMMI的关系你了解吗

CMMI和CSMM都是评估和提升软件组织能力成熟度的模型&#xff0c;但它们在起源、应用范围、模型结构和实施目的等方面存在一些区别。在当今竞争激烈的软件市场中&#xff0c;提升软件能力成为了多数组织追求成功的关键因素。而选择适合的体系标准能够助力企业发展得更加迅速。作…

服务器资源监控告警处理

[] 服务器资源监控告警处理方案总结 服务器监控指标 服务器日常监控巡检时&#xff0c;总会遇到不同服务器的不同告警&#xff0c;使用不同的监控工具&#xff0c;监控的指标有所不同&#xff0c;但最基础的服务器资源指标&#xff0c;基本都支持&#xff0c;比如zabbix &a…

智慧公厕案例-江西省九江天花井森林公园公厕

背景介绍&#xff1a; 江西某市森林公园是江西省的一处重要旅游景点&#xff0c;每年吸引了大量游客前来游览。然而&#xff0c;由于游客众多&#xff0c;公园内的卫生设施相对滞后&#xff0c;公厕的清洁度和管理效率成为了游客诟病的重要问题。 建设背景&#xff1a; 公园内…

编译报错 - Missing trailing comma comma-dangle or Missing semicolon semi

一、comma-dangle规则&#xff1a; 这种错误通常出现在使用代码格式检查工具&#xff08;如ESLint&#xff09;时&#xff0c;具体是在JSON或者JavaScript对象、数组的最后一个元素后面缺少了逗号&#xff08;trailing comma&#xff09;。在某些编码标准中&#xff0c;要求在…

富集分析不求人,零代码可视化GO/KEGG分析结果

01 爱基百客云平台小工具使用 首先&#xff0c;打开爱基百客官网&#xff1a;http://www.igenebook.com&#xff1b;点击菜单栏最右侧“云平台”按钮。 弹出云平台界面&#xff08;下图&#xff09;&#xff0c;输入账号、密码和验证码方可登录&#xff1b;进入云平台&#xf…

四川企业携手精益生产咨询公司:转型升级,共赢未来

四川&#xff0c;这片孕育了无数商业传奇的土地&#xff0c;如今正迎来一场由精益生产引领的转型升级浪潮。为了在激烈的市场竞争中保持领先地位&#xff0c;越来越多的四川企业选择与精益生产咨询公司携手合作&#xff0c;共同探索提升生产效率、降低成本的路径。 精益生产&am…

通过 DaoCloud DCE 的场景化应用看容器云平台的核心能力(三)

以下场景来自DaoCloud官方文档场景化视频&#xff0c;这里以文字形式简单提取下要点&#xff0c;包括操作步骤和一些问题。 一共13个场景&#xff0c;本篇包含5个&#xff1a;9.快速定位异常与排障、10.基于CICD的应用发布、11.基于GitOps持续部署云原生应用、12.使用中间件与…

如何使用 Vercel 托管静态网站

今天向大家介绍 Vercel 托管静态网站的几种方式&#xff0c;不熟悉 Vercel 的伙伴可以看一下之前的文章&#xff1a;Vercel: 开发者免费的网站托管平台 Github 部署 打开 Vercel 登录界面&#xff0c;推荐使用 GitHub账号 授权登录。 来到控制台界面&#xff0c;点击 Add New …

入门指南:网站UI原型设计的简单方法

从零开始做网站UI原型设计&#xff0c;真的很有成就感&#xff01;那么&#xff0c;UI设计师从零开始做网站UI原型设计需要经历哪些过程呢&#xff1f;设计网站UI原型的第一步&#xff1a;绘制网站线框。本文将主要分为两个阶段&#xff1a;网站线框和原型绘制。 如何制作网站…

C++ //练习 13.17 分别编写前三题中所描述的numbered和f,验证你是否正确预测了输出结果。

C Primer&#xff08;第5版&#xff09; 练习 13.17 练习 13.17 分别编写前三题中所描述的numbered和f&#xff0c;验证你是否正确预测了输出结果。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*************************…

idea同步yapi插件

1、前言 yapi是一个很好的接口文档维护工具&#xff0c;其swagger功能&#xff0c;可将接口信息同步到yapi平台上&#xff0c;但是swagger的编写&#xff0c;大量入侵代码&#xff0c;也加大了开发工作量&#xff0c;目前调研了idea集成yapi同步工具&#xff0c;无需嵌入式编写…

背靠TON公链的Notcoin游戏项目,能否杀出GameFi的红海?

4月15日消息&#xff0c;Telegram生态中的游戏及Meme项目Notcoin&#xff0c;最近在X平台公布了令市场瞩目的代币经济学方案。据悉&#xff0c;NOT的总供应量高达1027亿枚&#xff0c;其中78%将分配给矿工和Voucher持有者&#xff0c;余下的22%预留给未来新用户、交易者及各类上…