当前位置: 首页 > 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 …...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...