API-正则表达式

学习目标:

  • 掌握正则表达式

学习内容:

`

  1. 什么是正则表达式
  2. 语法
  3. 元字符
  4. 修饰符

什么是正则表达式:

正则表达式是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。

通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式。

  • 使用场景

例如验证表单:用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配

比如用户名: /^[a-zA-Z0-9-_]{6,16}$/

过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等。

  • 小结
正则表达式用于匹配字符串中字符组合的模式
正则表达式的作用表单验证(匹配);过滤敏感词(替换);字符串中获取我们想要的部分(提取

语法:

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

  • 1.定义正则表达式语法
const 变量名 = /表达式/

其中/ / 是正则表达式字面量

比如:

const reg = /前端/
  • 2.判断是否有符合规则的字符串

test()方法 :用来查看正则表达式与指定的字符串是否匹配。

regObj.test(被检测的字符串)

比如:

    const str = '要坚持努力学习前端,加油,加油'//正则表达式使用://1. 定义规则const reg = /前端///2.是否匹配console.log(reg.test(str)) //true

如果正则表达式与指定的字符串匹配,返回true,否则false。

  • 小结

正则表达式使用分为几步?

1.定义正则表达式
2.检测查找是否匹配
  • 检索(查找)符合规则的字符串

exec()方法:在一个指定字符串中执行一个搜索匹配。

regObj.exec(被检测的字符串)

比如:

    const str = '要坚持努力学习前端,加油,加油'//正则表达式使用://1. 定义规则const reg = /前端///2.是否匹配// console.log(reg.test(str)) //true//3.exec()console.log(reg.exec(str))  //返回数组

如果匹配成功,exec()方法返回一个数组,否则返回null。

  • 小结
正则表达式检测查找区别
test()方法用于判断是否有符合规则的字符串,返回的是布尔值。找到返回true,否则false。
exec()方法用于检索(查找)符合规则的字符串,找到返回数组,否则为null。
 <title>正则表达式的使用</title>
</head><body><script>const str = '要坚持努力学习前端,加油,加油'//正则表达式使用://1. 定义规则const reg = /前端///2.是否匹配// console.log(reg.test(str)) //true//3.exec()console.log(reg.exec(str))  //返回数组</script></body>

元字符:

  • 普通字符

大多数的字符仅能够描述它们本身,这些字符称作普通字符

例如所有的字母和数字。

也就是说普通字符只能够匹配字符串中与它们相同的字符。

  • 元字符(特殊字符)

是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能。

比如,规定用户只能输入英文26个英文字母,普通字符的话 abcdefghijklm…
但是换成元字符写法:[a-z]

在这里插入图片描述

  • 小结
元字符是一些具有特殊含义的字符,可以极大提高了灵活性和强大的匹配功能
好处比如英文26个字母,我们使用元字符[a-z]简洁和灵活。
  • 元字符-边界符
    表示位置,开头和结尾,必须用什么开头,用什么结尾。

正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符。

边界符说明
^表示匹配行首的文本(以谁开始)
$表示匹配行尾的文本(以谁结束)

如果 ^$在一起,表示必须是精确匹配。

 //1.边界符console.log(/^哈/.test('哈')) //trueconsole.log(/^哈/.test('哈哈')) //trueconsole.log(/^哈/.test('五哈')) //falseconsole.log(/^哈$/.test('哈'))  //true  只有这个情况为true,否则全是falseconsole.log(/^哈$/.test('哈哈'))//falseconsole.log(/^哈$/.test('五哈'))//false
  • 元字符-量词
    表示重复次数。

量词用来设定某个模式出现的次数

量词说明
*重复零次或更多次
+重复一次或更多次
重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

注意:逗号左右两侧千万不要出现空格。

  //量词 * 类似 >=0  次console.log(/^哈$/.test('哈'))//trueconsole.log(/^哈*$/.test(''))//trueconsole.log(/^哈*$/.test('哈'))//trueconsole.log(/^哈*$/.test('哈哈'))//trueconsole.log(/^哈*$/.test('五哈很傻'))//falseconsole.log(/^哈*$/.test('哈很傻'))//falseconsole.log(/^哈*$/.test('哈很哈'))//falseconsole.log('--------------')//量词 + 类似 >=1 次console.log(/^哈$/.test('哈'))//trueconsole.log(/^哈+$/.test(''))//falseconsole.log(/^哈+$/.test('哈'))//trueconsole.log(/^哈+$/.test('哈哈'))//trueconsole.log(/^哈+$/.test('五哈很傻'))//falseconsole.log(/^哈+$/.test('哈很傻'))//falseconsole.log(/^哈+$/.test('哈很哈'))//falseconsole.log('--------------')//量词 ? 类似 0 || 1console.log(/^哈?$/.test(''))//trueconsole.log(/^哈?$/.test('哈'))//trueconsole.log(/^哈?$/.test('哈哈'))//falseconsole.log(/^哈?$/.test('五哈很傻'))//falseconsole.log(/^哈?$/.test('哈很傻'))//falseconsole.log(/^哈?$/.test('哈很哈'))//falseconsole.log('--------------')// 量词 {n} 写几,就必须出现几次console.log(/^哈{4}$/.test('哈')) //falseconsole.log(/^哈{4}$/.test('哈哈')) //falseconsole.log(/^哈{4}$/.test('哈哈哈')) //falseconsole.log(/^哈{4}$/.test('哈哈哈哈')) //trueconsole.log(/^哈{4}$/.test('哈哈哈哈哈')) //falseconsole.log(/^哈{4}$/.test('哈哈哈哈哈哈')) //falseconsole.log('--------------')// 量词 {n,}   >=nconsole.log(/^哈{4,}$/.test('哈')) //falseconsole.log(/^哈{4,}$/.test('哈哈')) //falseconsole.log(/^哈{4,}$/.test('哈哈哈')) //falseconsole.log(/^哈{4,}$/.test('哈哈哈哈')) //trueconsole.log(/^哈{4,}$/.test('哈哈哈哈哈')) //true console.log(/^哈{4,}$/.test('哈哈哈哈哈哈')) //trueconsole.log('--------------')// 量词 {n,m}  逗号左右两侧千万不能有空格    >=n && <= mconsole.log(/^哈{4,6}$/.test('哈')) //falseconsole.log(/^哈{4,6}$/.test('哈哈')) //falseconsole.log(/^哈{4,6}$/.test('哈哈哈')) //falseconsole.log(/^哈{4,6}$/.test('哈哈哈哈')) //true console.log(/^哈{4,6}$/.test('哈哈哈哈哈')) //true console.log(/^哈{4,6}$/.test('哈哈哈哈哈哈')) //true console.log(/^哈{4,6}$/.test('哈哈哈哈哈哈哈'))  //false
  • 元字符-字符类
    比如\d 表示0~9

1.[ ] 匹配字符集合
后面的字符串只要包含abc中任意一个字符,都返回true。

 // 字符类   [abc]  只选1个console.log(/^[abc]$/.test('a'))  // trueconsole.log(/^[abc]$/.test('b'))  // trueconsole.log(/^[abc]$/.test('c'))  // trueconsole.log(/^[abc]$/.test('ab'))  // falseconsole.log(/^[abc]{2}$/.test('ab'))  // true

2.[ ] 里面加上 - 连字符:[A-Z]
使用连字符 - 表示一个范围。

console.log(/^[A-Z]$/.test('P')) // true

比如:

[a-z]表示a到z26个英文字母都可以
[a-zA-Z]表示大小写都可以
[0-9]表示0~9的数字都可以
// 字符类   [a-z]  只选1个console.log(/^[A-Z]$/.test('p'))  // falseconsole.log(/^[A-Z]$/.test('P'))  // trueconsole.log(/^[0-9]$/.test(2))  // trueconsole.log(/^[a-zA-Z0-9]$/.test(2))  // trueconsole.log(/^[a-zA-Z0-9]$/.test('p'))  // trueconsole.log(/^[a-zA-Z0-9]$/.test('P'))  // true

3.[ ]里面加上^取反符号:[^a-z]

比如:

[^a-z]匹配除了小写字母以外的字符
注意要写到中括号里面-

4..匹配除换行符之外的任何单个字符。

  • 小结
字符类.(点)匹配除换行符之外的任何单个字符
[abc]匹配abc其中的任何单个字符
[a-z]匹配26个小写英文字母其中的任何单个字符
[^a-z]匹配除了26个小写英文字母之外的其他任何单个字符
  • 练习
 <title>练习-用户名验证案例</title><style>span {display: inline-block;width: 250px;height: 30px;vertical-align: middle;line-height: 30px;padding-left: 15px;}.error {color: red;background: url(./images/error1.png) no-repeat left center;}.right {color: green;background: url(./images/right.png) no-repeat left center;}</style>
</head><body><input type="text" name="" id=""><span></span><script>//1.准备正则const reg = /^[a-zA-Z0-9-_]{6,16}$/const input = document.querySelector('input')const span = input.nextElementSiblinginput.addEventListener('blur', function () {// console.log(reg.test(this.value))if (reg.test(this.value)) {span.innerHTML = '输入正确'span.className = 'right'} else {span.innerHTML = '请输入6-16位的英文数字下划线'span.className = 'error'}})</script></body>

5.预定义:指的是某些常见模式的简写方式

预定类说明
\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]

修饰符:

  • 修饰符约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等。
/表达式/修饰符
i正则匹配时字母不区分大小写
g匹配所有满足正则表达式的结果
    console.log(/^java$/.test('java')) //trueconsole.log(/^java$/i.test('JAVA')) //trueconsole.log(/^java$/i.test('Java')) //true
  • 替换 replace替换
字符串.replace(/正则表达式/,'替换的文本')
 <title>修饰符</title>
</head><body><script>console.log(/^java$/.test('java')) //trueconsole.log(/^java$/i.test('JAVA')) //trueconsole.log(/^java$/i.test('Java')) //trueconst str = 'java是一门编程语言,学习JAVA过程很难'// const re = str.replace(/java|JAVA/g, '前端')const re = str.replace(/java/ig, '前端')console.log(re)  // 前端是一门编程语言, 学习JAVA过程很难</script></body>
  • 练习
<title>练习-过滤敏感字</title>
</head><body><textarea name="" id="" cols="30" rows="10"></textarea><button>发布</button><div></div><script>const tx = document.querySelector('textarea')const btn = document.querySelector('button')const div = document.querySelector('div')btn.addEventListener('click', function () {// console.log(tx.value)div.innerHTML = tx.value.replace(/激情|基情/g, '**')tx.value = ''})</script></body>

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

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

相关文章

Python28-7.1 降维算法之PCA主成分分析

降维算法是一类数据处理技术&#xff0c;主要用于将高维数据映射到低维空间中&#xff0c;从而减少数据的维度。降维不仅可以减少计算复杂度&#xff0c;提高算法性能&#xff0c;还可以帮助数据可视化。常见的降维算法包括主成分分析&#xff08;PCA&#xff09;、线性判别分析…

Studying-代码随想录训练营day29| 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

第29天&#xff0c;贪心part03&#xff0c;快过半了(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 134.加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列 134.加油站 文档讲解&#xff1a;代码随想录加油站 视频讲解&#xff1a;手撕加油站…

后端之路——阿里云OSS云存储

一、何为阿里云OSS 全名叫“阿里云对象存储OSS”&#xff0c;就是云存储&#xff0c;前端发文件到服务器&#xff0c;服务器不用再存到本地磁盘&#xff0c;可以直接传给“阿里云OSS”&#xff0c;存在网上。 二、怎么用 大体逻辑&#xff1a; 细分的话就是&#xff1a; 1、准…

【Linux】目录和文件的权限意义

现在我们知道了Linux系统内文件的三种身份&#xff08;拥有者、用户组与其他人&#xff09;&#xff0c;知道每种身份都有三种权限&#xff08;rwx&#xff09;&#xff0c;也知道能够使用chown、chgrp、chmod修改这些权限与属性&#xff0c;当然&#xff0c;利用IS-l去查看文件…

时空预测+特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比

时空预测特征分解&#xff01;高性能&#xff01;EMD-Transformer和Transformer多变量交通流量时空预测对比 目录 时空预测特征分解&#xff01;高性能&#xff01;EMD-Transformer和Transformer多变量交通流量时空预测对比效果一览基本介绍程序设计参考资料 效果一览 基本介绍…

目标检测入门:3.目标检测损失函数(IOU、GIOU、GIOU)

目录 一、IOU 二、GIOU 三、DIOU 四、DIOU_Loss实战 在前面两章里面训练模型时&#xff0c;损失函数都是选择L1Loss&#xff08;平均绝对值误差&#xff08;MAE&#xff09;&#xff09;损失函数&#xff0c;L1Loss损失函数公式如下: 由公式可知&#xff0c;L1Loss损失函数…

视频监控平台web客户端的免密查看视频页:在PC浏览器上如何调试手机上的前端网页(PC上的手机浏览器的开发者工具)

目录 一、手机上做前端页面开发调试 1、背景 2、视频监控平台AS-V1000的视频分享页 3、调试手机前端页面代码的条件 二、手机端的准备工作 1、手机准备 2、手机的开发者模式 3、PC和手机的连接 &#xff08;1&#xff09;进入调试模式 &#xff08;2&#xff09;选择…

Android Compose 十二:常用组件列表 上拉加载

列表 上拉加载 当前思路 判断 列表最后一个显示的条目 为 数据集合的长度-1 用来记录刷新状态 var refreshing by remember {mutableStateOf(false)}数据集合 val list remember{List(10){"条目》》${it}"}.toMutableStateList()}用来记录列表当前状态及状态变化…

Redis分布式集群部署

目录 一. 原理简述 二. 集群配置​​​​​​​ 2.1 环境准备 2.2 编译安装一个redis 2.3 创建集群 2.4 写入数据测试 实验一&#xff1a; 实验二&#xff1a; 实验三&#xff1a; 实验四&#xff1a; 添加节点 自动分配槽位 提升节点为master&#xff1a; 实验…

不知几DAY的Symfony---RCE复现

感谢红队大佬老流氓的供稿&#xff0c;此篇文章是针对Symfony框架的一个RCE漏洞复现 ​框架简介 Symfony是一个开源的PHP Web框架&#xff0c;它现在是许多知名 CMS 的核心组件&#xff0c;例如Drupal、Joomla!、eZPlatform&#xff08;以前称为 eZPublish&#xff09;或Bolt。…

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法&#xff0c;使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上&#xff0c;所有的vue模板都是语法层面的HTML&#xff0c;可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…

Python学习篇:Python基础知识(三)

目录 1 Python保留字 2 注释 3 行与缩进 ​编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字&#xff08;也称为关键字&#xff09;是Python编程语言中预定义的、具有特殊含义的标识符。这些保留字不能用作…

航空数据管控系统-①项目准备阶段:任务1:项目需求描述

任务描述 从用户的角度阐述项目的开发背景、使用范围及功能需求&#xff0c;从而指导学生独立完成项目的设计与开发。 任务指导 目录 标题 内容 备注 1. 项目概述 1.1 项目背景介绍 &#xff08;1&#xff09;说明产品是什么&#xff0c;什么用途 &#xff08;2&#xff…

【FFmpeg】avcodec_send_frame函数

目录 1.avcodec_send_frame1.1 将输入的frame存入内部buffer&#xff08;encode_send_frame_internal&#xff09;1.1.1 frame的引用函数&#xff08;av_frame_ref &#xff09;1.1.1.1 帧属性的拷贝&#xff08;frame_copy_props&#xff09;1.1.1.2 buffer的引用函数&#xf…

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中&#xff08;不考虑缓存&#xff09; 任何程序在运行之前都的加入到内存。 eip->pc指针&#xff0c;指明当前指令在什么位置。 代码大概率是从上往下执行的&#xff0c;基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…

git 还原被删除的分支

在多人项目开发中&#xff0c;有一次碰到忘记合并到master分支了&#xff0c;直接就把开发分支给删除了&#xff0c;现在记录下怎么还原被删除的分支 必须保证删除的分支之前已经被推送到了远程仓库 # 找出被删除分支的最后一个提交的哈希值 git reflog show# 找到提交哈希值…

【SSL 1823】消灭怪物(非传统BFS)

题目大意 小b现在玩一个极其无聊的游戏&#xff0c;它控制角色从基地出发&#xff0c;一路狂奔夺走了对方的水晶&#xff0c;可是正准备回城时&#xff0c;发现地图上已经生成了 n n n 个怪。 现在假设地图是二维平面&#xff0c;所有的怪和角色都认为是在这个二维平面的点上…

微信小程序的开发

前端&#xff1a;微信小程序开发的技术 后端&#xff1a;springboot的框架 一&#xff1a;微信小程序环境的搭建 1. 访问微信开发者官⽅⽹站的⼩程序开发⼯具下载⻚⾯。 2. 根据你的操作系统&#xff08;Windows、macOS或Linux&#xff09;选择合适的版本进⾏下载。 3. 下…

前端三件套开发模版——产品介绍页面

今天有空&#xff0c;使用前端三件套html、css、js制作了一个非常简单的产品制作页面&#xff0c;与大家分享&#xff0c;希望可以满足大家应急的需求。本页面可以对产品进行“抢购”、对产品进行介绍&#xff0c;同时可以安排一张产品的高清大图&#xff0c;我也加入了页面的背…

电气-伺服(4)CANopen

一、CAN Controller Area Network ,控制器局域网&#xff0c;80年的德国Bosch的一家公司研发可以测量仪器直接的实时数据交换而开发的一款串行通信协议。 CAN发展历史 二、CAN 的osi 模型 CAN特性&#xff1a; CAN 的数据帧 三、CANopen 什么是CANopen CANopen 的网络模型 …