当前位置: 首页 > news >正文

【JS】Chapter11-正则阶段案例

站在巨人的肩膀上

黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程

(十一)正则&阶段案例

1. 正则表达式

1.1 介绍

  • 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在 JavaScript 中,正则表达式也是对象。
  • 通常用来查找、替换那些符合正则表达式的文本。
  • 正则表达式在 JavaScript 中的使用场景:
    • 例如验证表单:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)
      • 比如用户名要求用户小写英文字母,数字,下划线或者短横线组成,并且用户名长度为 3~16位: /^[a-z0-9_-]{3,16}$/
    • 过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等。

1.2 语法

JavaScript 中定义正则表达式的语法有两种,我们先学习其中比较简单的方法:

  1. 定义正则表达式语法:

    const 变量名 = /表达式/
    
    • 其中 / / 是正则表达式字面量
    • 比如:
      const reg = /前端/
      
  2. 判断是否有符合规则的字符串:

    • test() 方法用来查看正则表达式与指定的字符串是否匹配
    • 语法:
      regObj.test
      
    • 比如:
      // 要检测的字符串
      const str = 'IT培训,前端开发培训,IT培训课程,web前端培训,Java培训,人工智能培训'
      // 1. 定义正则表达式,检测规则
      const reg = /前端/
      // 2. 检测方法
      console.log(reg.test(str))  // true
      
    • 如果正则表达式与指定的字符串匹配,返回true,否则false
  3. 检索(查找)符合规则的字符串:

    • exec() 方法在一个指定字符串中执行一个搜索匹配
    • 语法:
      regObj.exec(被检测字符串)
      
    • 比如:
      // 要检测的字符串
      const str = 'IT培训,前端开发培训,IT培训课程,web前端培训,Java培训,人工智能培训'
      // 1. 定义正则表达式,检测规则
      const reg = /前端/
      // 2. 检测方法
      console.log(reg.exec(str))  // 返回的是数组
      // ['前端', index: 5, input: 'IT培训,前端开发培训,IT培训课程,web前端培训,Java培训,人工智能培训', groups: undefined]
      
    • 如果匹配成功,exec()方法返回一个数组,否则返回null

1.3 元字符

  • 普通字符:
    • 大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。
    • 也就是说普通字符只能够匹配字符串中与它们相同的字符。
  • 元字符(特殊字符)
    • 是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能。
    • 比如,规定用户只能输入英文26个英文字母,普通字符的话 abcdefghijklm…
    • 但是换成元字符写法: [a-z]
  • 参考文档:
    • MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
    • 正则测试工具: http://tool.oschina.net/regex
  • 为了方便记忆和学习,我们对众多的元字符进行了分类:
    • 边界符(表示位置,开头和结尾,必须用什么开头,用什么结尾)
    • 量词(表示重复次数)
    • 字符类(比如 \d 表示 0~9)
1.3.1 边界符
  • 正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符

    边界符说明
    ^表示匹配行首的文本(以谁开始)
    $表示匹配行尾的文本(以谁结束)
  • 如果 ^ 和 $ 在一起,表示必须是精确匹配

  • 例子:

    console.log(/哈/.test('哈'))                // true
    console.log(/二哈/.test('二哈'))            // true
    console.log(/二哈/.test('很二哈哈'))        // true// ^ 开头
    console.log(/^二哈/.test('很二哈哈'))       // false
    console.log(/^二哈/.test('二哈很傻'))       // true// $ 结尾
    console.log(/^二哈$/.test('二哈很傻'))      // false
    console.log(/^二哈$/.test('二哈二哈'))      // false
    console.log(/^二哈$/.test('二哈'))          // true
    
1.3.2 量词
  • 量词用来设定某个模式出现的次数。

    量词说明
    *重复零次或更多次
    +重复一次或更多次
    ?重复零次或一次
    {n}重复n次
    {n,}重复n次或更多次
    {n,m}重复n到m次
  • 注意:逗号左右两侧千万不要出现空格。

  • 例子:

    // * 表示重复 0 次或者更多次
    console.log(/^哈*$/.test(''))           // true
    console.log(/^哈*$/.test('哈'))         // true
    console.log(/^哈*$/.test('哈哈哈'))     // true// + 表示重复 1 次或者更多次
    console.log(/^哈+$/.test(''))           // false
    console.log(/^哈+$/.test('哈'))         // true
    console.log(/^哈+$/.test('哈哈哈'))     // true// ? 表示重复 0 次或者 1 次
    console.log(/^哈?$/.test(''))           // true
    console.log(/^哈?$/.test('哈'))         // true
    console.log(/^哈?$/.test('哈哈哈'))     // falseconsole.log(/^哈{2}$/.test(''))         // false
    console.log(/^哈{2}$/.test('哈'))       // false
    console.log(/^哈{2}$/.test('哈哈'))     // true
    console.log(/^哈{2}$/.test('哈哈哈'))   // falseconsole.log(/^哈{2,}$/.test(''))        // false
    console.log(/^哈{2,}$/.test('哈'))      // false
    console.log(/^哈{2,}$/.test('哈哈'))    // true
    console.log(/^哈{2,}$/.test('哈哈哈'))  // trueconsole.log(/^哈{2,4}$/.test(''))           // false
    console.log(/^哈{2,4}$/.test('哈'))         // false
    console.log(/^哈{2,4}$/.test('哈哈'))       // true
    console.log(/^哈{2,4}$/.test('哈哈哈'))     // true
    console.log(/^哈{2,4}$/.test('哈哈哈哈'))   // true
    console.log(/^哈{2,4}$/.test('哈哈哈哈哈')) // false
    
1.3.3 字符类
1.3.3.1 [ ] 匹配字符集合
  1. 后面的字符串只要包含 abc 中任意一个字符,都返回 true

    console.log(/[abc]/.test('andy'))   // true
    console.log(/[abc]/.test('baby'))   // true
    console.log(/[abc]/.test('cry'))    // true
    console.log(/[abc]/.test('die'))    // false
    
  2. 里面加上 - 连字符

  • 使用连字符 - 表示一个范围
    console.log(/^[a-z]$/.test('c'))   // true
    
  • 比如:
    • [a-z] 表示 a 到 z 26个英文字母都可以
    • [a-zA-Z] 表示大小写都可以
    • [0-9] 表示 0~9 的数字都可
  • 例子:
    腾讯QQ号:^[1-9][0-9]{4,}$  (腾讯QQ号从10000开始)
    
  1. 里面加上 ^ 取反符
  • 比如:
    • [^a-z] 匹配除了小写字母以外的字符
    • 注意要写到中括号里
1.3.3.2 . 匹配除换行符之外的任何单个字符

要求用户只能输入中文:/^[\u4e00-\u9fa5]{2,8}$/

1.3.3.3 预定义:指的是某些常见模式的简写方式
预定类说明
\d匹配0-9之间的任意数字,相当于[0-9]
\D匹配所有0-9以外的字符,相当于[^0-9]
\w匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]
\W除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]
\s匹配空格(包括换行符、制表符、空格符等),相当于[\t\r\n\v\f]
\S匹配非空格的字符,相当于[^\t\r\n\v\f]
  • 日期格式:^\d{4}-\d{1,2}-\d{1,2}

1.4 修饰符

  • 修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等

  • 语法:

    /表达式/修饰符
    
  • i 是单词 ignore 的缩写,正则匹配时字母不区分大小写

  • g 是单词 global 的缩写,匹配所有满足正则表达式的结果

  • 例子:

    console.log(/a/i.test('a'))     // true
    console.log(/a/i.test('A'))     // true
    
  • 替换 replace 替换。语法:

    字符串.replace(/正则表达式/, '替换的文本')
    

2. 综合案例

  • 手机号验证:/^1(3\d|4[5-9]|5[0-35-9]|6[567]|7[0-8]|8\d|9[0-35-9])\d{8}$/
  • 验证码验证:/^\d{6}$/
  • 密码验证:/^[a-zA-Z0-9-_]{6,20}$/

相关文章:

【JS】Chapter11-正则阶段案例

站在巨人的肩膀上 黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程 (十一)正则&阶段案例 1. 正则表达式 1.1 介绍 正则表达式(Regular Expression&#xff0…...

跨时钟域(Clock Domain Crossing,CDC)

本文参考:http://t.csdnimg.cn/VHga2 【数字IC基础】跨时钟域(CDC,Clock Domain Crossing)_ReRrain的博客-CSDN博客 同步设计:所有设计使用同一时钟源,频率相位可预知。 异步设计:设计中有两…...

PTA古风排版

中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;<100&#xff09;&#xff0c;是每一列的字符数。第二行给出一个长度不超过1000的非空字符串&a…...

SQL 注入漏洞详解

SQL 注入漏洞详解 漏洞描述 sql注入漏洞是指恶意用户在应用与数据库交互的地方利用非法的操作获取数据库内容从以下两点分析: 没有对用户输入的数据进行充分的过滤和验证&#xff0c;导致一些用户利用此漏洞向数据库插入恶意sql语句非法请求数据库从而获得一些敏感数据在与数…...

关于阿里云 ACK ingress部分补充

强调&#xff1a; 本文只是作为记录,过一段时间会删除 跟唐老师学习网络 一 Nginx Ingress管理 ① 流量走向 需求&#xff1a; 应用绑定LoadBalance,会自动创建或使用SLBeip:port --> nodeport_ip:port --> service_ip:port --> pod_ip:port 支持的注解 通过…...

轻量封装WebGPU渲染系统示例<22>- 渲染到纹理(RTT)(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/RTTTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class RTTTest {private mRscene new RendererScene()…...

官方Redis视图化工具Redisinsight

一、下载最新版本的 docker pull redislabs/redisinsight mkdir /data/redisinsight docker run -d -u root -p 8001:8001 -v /etc/localtime:/etc/localtime -v /data/redisinsight:/db --restartunless-stopped redislabs/redisinsight:latest 二、浏览器打开 http://192…...

Vue+Django REST framework 打造生鲜电商项目课程下载树大根深

VueDjango REST framework 打造生鲜电商项目 链接&#xff1a;https://pan.baidu.com/s/1kEDxPsoTYSVWPYB2H0jbBw?pwd6666 提取码&#xff1a;6666Django是高水准的Python编程语言驱动的一个开源模型&#xff0e;视图&#xff0c;控制器风格的Web应用程序框架&#xff0c;它…...

react中遇到的分页问题

问题&#xff1a; 1.使用useState时不能够进行当前页码的改变&#xff0c;数据不会随着页码变化 2.删除当前页的最后一条数据时&#xff0c;页码返回上一页但是数据为空 解决&#xff1a; 1.由于useState和useRef的区别那我们就不考虑使用useState 2.再删除的逻辑当中添加判断条…...

变电站自动化系统中的安全措施分析及应用-安科瑞

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;阐述变电运行中的问题&#xff0c;电气自动化系统与安全运行措施&#xff0c;包括自动控制设备的投入&#xff0c;电气自动 化与计算机技术相、设备数据的采集与处理、自动化系统的升级、人工智能技术的应用。 关键…...

【MongoDB】索引 – 文本索引

一、准备工作 这里准备一些数据 db.books.insertMany([{_id: 1, name: "Java", description: "java 入门图书", translation: [{ language: "english", description: "java basic book" }]},{_id: 2, name: "C", descript…...

【广州华锐互动】影视制作VR在线学习:身临其境,提高学习效率

随着科技的不断发展&#xff0c;影视后期制作技术也在日新月异。然而&#xff0c;传统的教学方式往往难以满足学员的学习需求&#xff0c;无法充分展现影视后期制作的魅力和潜力。近年来&#xff0c;虚拟现实(VR)技术的崛起为教学领域带来了新的机遇。通过VR教学课件&#xff0…...

Linux 命令:PS(进程状态)

1. 写在前面 本文主要介绍&#xff1a;Linux 下常用命令 PS —— 进程状态&#xff1b; 公众号&#xff1a; 滑翔的纸飞机 2. PS — 介绍&#xff08;进程状态&#xff09; ps 命令&#xff1a;显示 Linux 系统中运行进程有关的信息。 rootdev:~# psPID TTY TIME C…...

手把手教你:LLama2原始权重转HF模型

LLama2是meta最新开源的语言大模型&#xff0c;训练数据集2万亿token&#xff0c;上下文长度由llama的2048扩展到4096&#xff0c;可以理解和生成更长的文本&#xff0c;包括7B、13B和70B三个模型&#xff0c;在各种基准集的测试上表现突出&#xff0c;该模型可用于研究和商业用…...

后入能先出,一文搞懂栈

目录 什么是栈数组实现链表实现栈能这么玩总结 什么是栈 栈在我们日常编码中遇到的非常多&#xff0c;很多人对栈的接触可能仅仅局限在 递归使用的栈 和 StackOverflowException&#xff0c;栈是一种后进先出的数据结构(可以想象生化金字塔的牢房和生化角斗场的狗洞)。 栈&…...

京东API接口的应用场景:商品信息查询,商品详情获取

京东API接口的应用场景涵盖了电商业务的各个方面&#xff0c;通过API的方式&#xff0c;开发者可以方便地获取京东平台上的商品信息、用户信息、订单信息等&#xff0c;进而进行个性化的应用开发。以下是几个典型的应用场景&#xff1a; 商品信息查询&#xff1a;通过京东API接…...

微信小程序使用iconfont坑

下载解压 font-face {font-family: "iconfont"; /* Project id 4322044 */src: url(iconfont.woff2?t1699515502419) format(woff2),url(iconfont.woff?t1699515502419) format(woff),url(iconfont.ttf?t1699515502419) format(truetype); }.iconfont {font-famil…...

最新Cocos Creator 3.x 如何动态修改3D物体的透明度

Cocos Creator 3.x 的2D UI有个组件UIOpacity组件可以动态修改UI的透明度,非常方便。很多同学想3D物体上也有一个这样的组件来动态的控制与修改3D物体的透明度。今天基于Cocos Creator 3.8 来实现一个可以动态修改3D物体透明度的组件Opacity3D。 对啦&#xff01;这里有个游戏…...

golang 2018,go 1.19安装Gin

GOPROXYhttps://mirrors.aliyun.com/goproxy/ 一致提示URL不能有点&#xff0c;给我整郁闷了&#xff0c;换了这个地址好了 但是一致提示zip的包问题&#xff0c;最后还是不行又换回七牛 NEWBEE&#xff01; [GIN-debug] Environment variable PORT is undefined. Using por…...

常用的三角函数公式

sin ⁡ 2 x cos ⁡ 2 x 1 \sin ^2 x \cos ^2 x 1 sin2xcos2x1 tan ⁡ x sin ⁡ x cos ⁡ x \tan x \dfrac{\sin x}{\cos x} tanxcosxsinx​ cot ⁡ x 1 tan ⁡ x cos ⁡ x sin ⁡ x \cot x \dfrac{1}{\tan x}\dfrac{\cos x}{\sin x} cotxtanx1​sinxcosx​ sec …...

低代码平台前端页面表格字段绑定与后端数据传输交互主要有哪些方式?华为云Astro在这方面有哪些方式?

目录 🔧 一、低代码平台中常见的数据绑定与交互方式 1. 接口绑定(API 调用) 2. 数据源绑定(DataSource) 3. 变量中转(临时变量 / 页面状态) 4. 数据模型绑定(模型驱动) 🌐 二、华为云 Astro 轻应用的实现方式 ✅ 1. 数据源绑定(API服务+API网关) ✅ 2. 变…...

【HarmonyOS5】UIAbility组件生命周期详解:从创建到销毁的全景解析

⭐本期内容&#xff1a;【HarmonyOS5】UIAbility组件生命周期详解&#xff1a;从创建到销毁的全景解析 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS&#xff1a;探索未来智能生态新纪元 文章目录 前言生命周期全景图详细状态解析与最佳实践&#x1f3ac; Create状态&#…...

在Ubuntu上使用 dd 工具制作U盘启动盘

在Ubuntu上使用 dd 工具制作U盘启动盘 在Linux系统中&#xff0c;dd 是一个功能强大且原生支持的命令行工具&#xff0c;常用于复制文件和转换数据。它也可以用来将ISO镜像写入U盘&#xff0c;从而创建一个可启动的操作系统安装盘。虽然图形化工具&#xff08;如 Startup Disk…...

深入理解汇编语言中的顺序与分支结构

本文将结合Visual Studio环境配置、顺序结构编程和分支结构实现&#xff0c;全面解析汇编语言中的核心编程概念。通过实际案例演示无符号/有符号数处理、分段函数实现和逻辑表达式短路计算等关键技术。 一、汇编环境配置回顾&#xff08;Win32MASM&#xff09; 在Visual Studi…...

Impromptu VLA:用于驾驶视觉-语言-动作模型的开放权重和开放数据

25年5月来自清华和博世的论文“Impromptu VLA: Open Weights and Open Data for Driving Vision-Language-Action Models”。 用于自动驾驶的“视觉-语言-动作” (VLA) 模型前景光明&#xff0c;但在非结构化极端场景下却表现不佳&#xff0c;这主要是由于缺乏有针对性的基准测…...

Redis 与 MySQL 数据一致性保障方案

在高并发场景下&#xff0c;Redis 作为缓存中间件与 MySQL 数据库配合使用时&#xff0c;数据一致性是一个关键挑战。本文将详细探讨如何保障 Redis 与 MySQL 的数据一致性&#xff0c;并结合 Java 代码实现具体方案。 数据不一致的原因分析 在分布式系统中&#xff0c;Redis…...

win32相关(消息Hook)

消息Hook 要想实现消息Hook需要使用到三个相关的Api SetWindowsHookEx // 设置钩子CallNextHookEx // 将钩子信息传递到当前钩子链中的下一个子程序UnhookWindowsHookEx // 卸载钩子 我们编写的消息钩子需要将设置钩子的函数写到dll里面&#xff0c;当钩住一个线程后&#xff…...

vue组件的data为什么是函数?

vue组件的data为什么是函数&#xff1f; 在JS中&#xff0c;实例是通过构造函数创建的&#xff0c;每个构造函数可以new出多个实例&#xff0c;每个实例都会继承原型上的方法和属性。 在vue中&#xff0c;一个vue组件就是一个实例&#xff0c;当一个组件被复用多次&#xff0…...

ubuntu opencv 安装

1.ubuntu opencv 安装 在Ubuntu系统中安装OpenCV&#xff0c;可以通过多种方式进行&#xff0c;以下是一种常用的安装方法&#xff0c;包括从源代码编译安装。请注意&#xff0c;安装步骤可能会因OpenCV的版本和Ubuntu系统的具体版本而略有不同。 一、安装准备 更新系统&…...

《影像引导下骨盆创伤手术的术前骨折复位规划:基于学习的综合流程》|文献速递-深度学习医疗AI最新文献

Title 题目 Preoperative fracture reduction planning for image-guided pelvic trauma surgery: A comprehensive pipeline with learning 《影像引导下骨盆创伤手术的术前骨折复位规划&#xff1a;基于学习的综合流程》 01 文献速递介绍 《影像引导下骨盆创伤手术的术前…...