学习笔记整理-正则表达式-01-认识正则
一、基本认识
1. 什么是正则表达式
-
正则表达式(regular expression)描述了字符串"构成模式",经常被用于检查字符串是否符合预定的格式要求。
-
用一个例子快速演示正则表达式基本使用方法:
检查某个字符串是否是6位数字// 要检查的字符串var str = '456789';// 正则表达式规则var regexp = /^\d{6}$/; // 检查if (regexp.test(str)) {alert('符合规则'); } else {alert('不符合规则'); }/^\d{6}$/就是正则表达式,它描述了字符串必须是"6位数字"的构成规则。- 正则表达式可以调用
test()方法,检查某字符串是否符合正则表达式规定的规则。
-
正则表达式"按位"描述规则
- 正则表达式"按位"描述规则,是指它是一位一位的描述字符串的构成形式。
- 比如检查字符串是不是这样的:以字母
m开头,然后是3个数字,最后以字母n结尾。// ^表示开头,$表示结尾,\d 表示数字 \d\d\d也可以写作\d{3}/^m\d\d\dn$/
二、基本使用
1. 正则表达式的创建
- 使用
/内容/的语法形式,可以快速创建正则表达式。 - 也可以使用
new RegExp('内容')的形式,创建正则表达式。 - 使用
typeof运算符检查正则表达式的类型,结果是object。<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><script>// 创建正则表达式方法1var regexp1 = /^\d{6}$/;// 创建正则表达式方法2var regexp2 = new RegExp('^\\d{6}$');var str = '555666';console.log(regexp1.test(str)); // trueconsole.log(regexp2.test(str)); // trueconsole.log(typeof regexp1); // objectconsole.log(typeof regexp2); // object</script> </body> </html>
2. 元字符
-
"元字符"是指一位指定类型的字符
元字符 功能 \d匹配一个数字 \D匹配一个非数字字符 \w匹配一个单字字符(字母、数字或者下划线) \W匹配一个非单字字符 \s匹配一个空白字符,包括空格、制表符和换行符 .任意字符 -
开头和结尾
元字符 功能 ^匹配开头 $匹配结尾 -
元字符注意事项
- 如果使用
new RegExp()写法,反斜杠需要多写一个。 - 比如
/^\d$/和new RegExp('^\\d$')是相同的意思
- 如果使用
-
元字符使用举例
- 某快递公司运单号形式是这样的:123-4567-890,请使用正则表达式检查某字符串是否符合此格式
- 某产品的验证秘钥形式是这样的:
□□□-□□□□-□□□,其中□表示字母数字或者下划线,请使用正则表达式检查某字符串是否符合此格式
-
字符的转义
- 在特殊字符之前的反斜杠
\表示下一个字符不是特殊字符,应该按照字面理解。
/^.$/:检查字符串是不是任意字符
/^\.$/:检查字符串是不是一个点
/^\\$/:检查字符串是不是一个反斜杠 - 不管一个符号有没有特殊意义,都可以在其之前加上一个
\以确保它表达的是这个符号本身。 - 举例:某产品批号形式为:
123.45^67#89,请使用正则表 达式检查某字符串是否符合此格式
- 在特殊字符之前的反斜杠
-
代码演示
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><script>// 题目1:某快递公司运单号形式是这样的:123-4567-890,请使用正则表达式检查某字符串是否符合此格式// 正则表达式var regexp1 = /^\d\d\d-\d\d\d\d-\d\d\d$/;// 待测试的字符串var str1 = '444-5555-000';console.log(regexp1.test(str1));// 题目2:某产品的验证秘钥形式是这样的:□□□-□□□□-□□□,其中□表示字母数字或者下划线,请使用正则表达式检查某字符串是否符合此格式// 正则表达式var regexp2 = /^\w\w\w-\w\w\w\w-\w\w\w$/;// 待测试的字符串var str2 = 'abc-__ab-123';console.log(regexp2.test(str2));// 题目3:某产品批号形式为:123.45^67#89,请使用正则表达式检查某字符串是否符合此格式var regexp3 = /^\d\d\d\.\d\d\^\d\d\#\d\d$/;// 待测试的字符串var str3 = '666.66^66#66';console.log(regexp3.test(str3));</script> </body> </html>
3. 方括号表示法
-
使用方括号,比如[xyz],可以
创建一个字符集合,表示匹 配方括号中的任意字符。 -
比如某学校的学号规定:第1位是一个字母,b表示本科生,y表示研究生,后面是7位数字,用正则表示为:
/^[by]\d{7}$/ -
可以使用
短横-来指定一个字符范围,^表示否定元字符 等价的方括号表示法 \d[0-9] \D[^0-9] \w[A-Za-z0-9] \W[^A-Za-z0-9] -
方括号表示法小题目
- 题目1:请验证某字符串是否是5位字母,大小写均可
- 题目2:请验证某字符串是否是5位,且仅有小写字母、点构成
- 题目3:请验证某字符串是否是4位小写字母,且最后一位不能是m字母
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head><body><script>// 某学校的学号规定:第1位是一个字母,b表示本科生,y表示研究生,后面是7位数字,用正则表示为:// 学号字符串var str1 = 'm4444555';// 用正则表达式进行检查console.log(/^[by]\d{7}$/.test(str1));// *******************************************// 题目1:请验证某字符串是否是5位字母,大小写均可var str2 = 'abcde';var str3 = 'abcd5';console.log(/^[a-zA-Z]{5}$/.test(str2));console.log(/^[a-zA-Z]{5}$/.test(str3));// 题目2:请验证某字符串是否是5位,且仅由小写字母、点构成var str4 = 'mnp..';var str5 = 'mnp.#';console.log(/^[a-z\.]{5}$/.test(str4));console.log(/^[a-z\.]{5}$/.test(str5));// 题目3:请验证某字符串是否是4位小写字母,且最后一位不能是m字母var str6 = 'abcd';var str7 = 'abcm';var str8 = 'ab1c';console.log(/^[a-z]{3}[a-ln-z]$/.test(str6));console.log(/^[a-z]{3}[a-ln-z]$/.test(str7));console.log(/^[a-z]{3}[a-ln-z]$/.test(str8));</script> </body></html>
4. 量词
| 量词 | 意义 |
|---|---|
* | 匹配前一个表达式0次或多次。等价于{0,} |
+ | 匹配前面一个表达式1次或者多次。等价于{1,} |
? | 匹配前面一个表达式0次或者1次。等价于{0,1} |
{n} | n是一个正整数,匹配了前面一个字符刚好出现了n次 |
{n,} | n是一个正整数,匹配前一个字符至少出现了n次 |
{n, m} | n和m都是整数。匹配前面的字符至少n次,最多m次 |
- 量词小题目
- 题目1:请验证字符串是否符合手机号码的规则:11位数字,并且肯定以1开头。
- 题目2:请验证某字符串是否是这样的:以字母开头,中间是任意位数字(最少1位)构成,并以字母结尾。
- 题目3:请验证某字符串是否符合网址规则:以www.开头,中间是任意位的字符(字母数字下划线),最后以.com结尾,也可以以.com.cn结尾
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><script>// 题目1:请验证字符串是否符合手机号码的规则:11位数字,并且肯定以1开头var str1 = '13812345678';var str2 = '138123456789';var str3 = '38123456789';var regexp1 = /^1\d{10}$/;console.log(regexp1.test(str1));console.log(regexp1.test(str2));console.log(regexp1.test(str3));// 题目2:请验证某字符串是否是这样的:以字母开头,中间是任意位数字(最少1位)构成,并以字母结尾var str4 = 'a123123123b';var str5 = 'abcd';var str6 = 'a1b';var regexp2 = /^[a-zA-Z]\d+[a-zA-Z]$/;console.log(regexp2.test(str4));console.log(regexp2.test(str5));console.log(regexp2.test(str6));// 题目3:请验证某字符串是否符合网址规则:以www.开头,中间是任意位的字符(字母数字下划线,最少一位),最后以.com结尾,也可以以.com.cn结尾var str7 = 'www.imooc.com';var str8 = 'www.sina.com.cn';var str9 = 'www.news.cn';var regexp3 = /^www\.\w+\.com(\.cn)?$/;console.log(regexp3.test(str7));console.log(regexp3.test(str8));console.log(regexp3.test(str9));</script> </body> </html>
5. 修饰符
-
修饰符也叫作标志(flags),用于使用正则表达式实现高 级搜索
修饰符 意义 i不区分大小写搜索 g全局搜索 -
修饰符的使用
var re = /m/gi;var re = new RegExp('m', 'gi');- 在正则表达式的第二个
/后面写修饰符,可以多个连写。 new RegExp()形式的正则表达式,以字符串形式写在第二个参数
- 在正则表达式的第二个
三、相关方法
1. 正则表达式可以"打点"调用哪些方法呢?
| 方法 | 简介 |
|---|---|
test() | 测试某字符串是否匹配正则表达式,返回布尔值 |
exec() | 根据正则表达式,在字符串中进行查找,返回结果数组或者null |
-
test()方法- 正则表达式的test()方法用来
测试某字符串是否匹配此正则表达式,它返回true或false/^[a-z]{3}[a-ln-z]$/.test('abcd')
- 正则表达式的test()方法用来
-
exec()方法- exec()方法功能是:在一个指定字符串中执行一个搜索匹配查找,返回一个结果数组或null
var str = 'abc123def456ghi789';var regexp = /\d+/;var result1 = regexp.exec(str); - exec()方法的逐条遍历
-
exec()方法最有趣的是,
有"g"修饰符的正则表达式将自动成为"有状态"的,
这意味着可以对单个字符串中的多次匹配结果进行逐条的遍历。<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head><body><script>var str = 'abc123def456ghi789';var regexp = /\d+/g; // +表示贪婪的,尽可能多的匹配var result1 = regexp.exec(str);var result2 = regexp.exec(str);var result3 = regexp.exec(str);var result4 = regexp.exec(str);console.log(result1);console.log(result2);console.log(result3);console.log(result4);// 使用循环语句来循环执行exec,寻找所有的匹配结果var result;while (result = regexp.exec(str)) {console.log(result);}</script> </body></html>
-
- exec()方法功能是:在一个指定字符串中执行一个搜索匹配查找,返回一个结果数组或null
-
字符串的相关方法
方法 简介 search()在字符串中根据正则表达式进行查找匹配,返 回首次匹配到的位置索引,测试不到则返回-1 match()在字符串中根据正则表达式进行查找匹配,返 回一个数组,找不到则返回null replace()使用替换字符串替换掉匹配到的子字符串,可以使用正则表达式 split()分隔字符串为数组,可以使用正则表达式 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><script>var str = 'abc123def4567ghi89';// search()方法,很像indexOf(),返回查找到的第一个下标,如果找不到就是-1var result1 = str.search(/\d+/g);var result2 = str.search(/m/g);console.log(result1); // 3console.log(result2); // -1// match()方法,返回查找到的数组,找不到就是nullvar result3 = str.match(/\d+/g);console.log(result3); // ["123", "4567", "89"]// replace()方法,进行替换var result4 = str.replace(/[a-z]+/g, '*'); // 注意+表示贪婪的,尽可能多的连续匹配小写字母console.log(result4); // *123*4567*89// split()方法,进行字符串拆为数组var result5 = str.split(/\d+/g);console.log(result5); // ["abc", "def", "ghi", ""]</script> </body> </html>
四、应用
-
用正则表达式进行表单验证
- 用正则表达式进行表单验证是正则表达式最重要的实际应用
<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.warning {color: red;display: none;}</style> </head><body><div><p>请输入中文姓名:<input type="text" id="nameField"><span class="warning" id="nameWarning">输入的姓名不合法</span></p><p>请输入手机号码:<input type="text" id="telField"><span class="warning" id="telWarning">输入的手机号码不合法</span></p><p>请输入Email:<input type="text" id="emailField"><span class="warning" id="emailWarning">输入的Email不合法</span></p></div><script>var nameField = document.getElementById('nameField');var telField = document.getElementById('telField');var emailField = document.getElementById('emailField');var nameWarning = document.getElementById('nameWarning');var telWarning = document.getElementById('telWarning');var emailWarning = document.getElementById('emailWarning');// 当文本框失去焦点,就是光标不在文本框中了nameField.onblur = function () {// 得到姓名var name = nameField.value;if (/^[\u4E00-\u9FA5]{2,4}$/.test(name)) {// 如果通过校验nameWarning.style.display = 'none';} else {// 如果没有通过校验nameWarning.style.display = 'inline';}};telField.onblur = function () {// 得到电话var tel = telField.value;if (/^1\d{10}$/.test(tel)) {// 如果通过校验telWarning.style.display = 'none';} else {// 如果没有通过校验telWarning.style.display = 'inline';}};emailField.onblur = function () {// 得到emailvar email = emailField.value;// 合法的email都是abc_def123@abc.netif (/^\w{2,}\@\w{2,}\.[a-z]{2,4}(\.[a-z]{2,4})?$/.test(email)) {// 如果通过校验emailWarning.style.display = 'none';} else {// 如果没有通过校验emailWarning.style.display = 'inline';}};</script> </body></html>
- 用正则表达式进行表单验证是正则表达式最重要的实际应用
-
重点内容
- 元字符、量词、方括号表示法
- 正则表达式和字符串的常用方法
相关文章:
学习笔记整理-正则表达式-01-认识正则
一、基本认识 1. 什么是正则表达式 正则表达式(regular expression)描述了字符串"构成模式",经常被用于检查字符串是否符合预定的格式要求。 用一个例子快速演示正则表达式基本使用方法:检查某个字符串是否是6位数字 // 要检查的字符串va…...
windows10/11 修改docker镜像存储目录
windows10/11 修改docker镜像存储目录 windows10/11 修改docker镜像存储目录查看docker的状态关闭所有正在运行的实例导出WSL子系统镜像注销现有的wsl重新创建wsl系统 windows10/11 修改docker镜像存储目录 docker默认pull的镜像在c盘,随着镜像的增加,C…...
AI黑马挑战赛,探索研发新趋势丨IDCF
随着AI的出现,获取知识的成本大幅降低,当DevOps与AI相结合时,必将产生全新的化学反应。不断涌现的AI新工具提醒我们,一个全新的研发工作范式正在逐渐形成。而DevOps的核心理念是敏捷协同,作为工程师,如何通…...
关于onload事件
onload事件是在网页中的所有内容(包括图片、样式表、脚本等)都加载完成后触发的事件。它常用于在页面加载完成后执行一些操作,例如初始化页面元素、绑定事件监听器等。 可以通过以下方式来使用onload事件: 在HTML标签中直接添加…...
合并单元格
需求: 合并 相同名称的产品 先说下elementUI合并单元格的方法,先计算好要合并的行数rowspan,return {rowspan,colspan},其他的单元格return{0,0} getData(params) {//临时数组,存放产品名称相同的数量this…...
Spring Boot @Validated 验证注解的使用
1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非对象参数 参数如果是非对象格式,需要在controller类上面添…...
如何理解“对矩阵进行初等行变换不改变其列向量的线性关系”?
对矩阵A进行初等行变换相当于左乘一个可逆矩阵P。 把A看作是列向量组,若有Ax0,则其中的x就说明了列向量的线性关系: [ α 1 , α 2 , α 3 ] [ x 1 x 2 x 3 ] [ 0 ] \left[ \alpha_1 ,\alpha_2, \alpha_3 \right] \begin{bmatrix} x_1\\ x…...
书店行业小程序开发攻略
随着移动互联网的快速发展,小程序成为了各行各业的热门选择,包括书店行业。书店小程序的开发可以为书店提供在线销售渠道,提高销售额,增强用户粘性。本文将介绍如何从搭建到上线开发一款书店行业小程序。 首先,我们需要…...
情感分析工具: TextBlob 与 VADER 的对比
一、说明 在本文我们将看到,在情感分析方面,我们更喜欢哪个库。这取决于很多情况。例如。数据采集。在我们进行分析之前,让我们先看看这两个库是关于什么的。 二、亮相工具库 2.1. 工具库TextBlob介绍: 图像。TextBlob: Simplif…...
uft8和utf8mb4的区别
文章目录 1、Unicode字符集2、UTF-8 编码3、utf8mb3 字符集4、utf8mb4 字符集5、utf8mb3和utf8mb4的区别 1、Unicode字符集 Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传…...
针对低分辨率或小目标的卷积-SPDConv
针对低分辨率或小目标的卷积-SPDConv 摘要引言A New Building Block:SPD-Conv附录代码: 摘要 卷积神经网络在许多计算机视觉任务中取得了巨大成功。然而,在图像低分辨率或目标较小任务上,他们的性能迅速下降。在本文中,我们指出&…...
vue基础-vue监听当前屏幕大小做不同的操作
文章目录 前言一、代码如下:总结 前言 在vue项目开发过程中,有个需求,就是当屏幕大于1024时,我们默认为PC模式。小于1024时,我们默认为H5模式。但是有的界面我们想在PC和H5上面展示不同的数据,请求不同的接…...
Unity框架学习--3
单例模式基类 构造函数私有化,防止外部创建对象 提供一个属性给外部访问,这个属性就相当于是这个类的唯一对象 分为懒汉模式和饿汉模式 不继承MonoBehaviour的单例模式 public static MyUiManager Instance {get{if (instance null){instance new …...
ARMday2
.text .global _start _start:mov r0,#0x1mov r1,#0x0sum:cmp r0,#0x64bhi stopaddls r1,r1,r0addls r0,r0,#0x1bls sumstop:b stop .end...
IntelliJ IDEA和Android studio怎么去掉usage和作者提示
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码…...
ssm营业厅宽带系统源码和论文
ssm简易版营业厅宽带系统源码和论文018 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,…...
CSS:background 复合属性详解(用法 + 例子 + 效果)
目录 background 复合属性background-color 背景颜色(纯)background-image 背景图片 或者 渐变颜色background-repeat 背景是否重复background-size 设置图片大小background-position 设置背景图片显示位置background-attachment 设置背景图片是否随页面…...
django中实现事务/django实现悲观锁乐观锁案例
django中实现事务的几种方式 # 1 全局开启事务---> 全局开启事务,绑定的是http请求响应整个过程DATABASES {default: {#全局开启事务,绑定的是http请求响应整个过程ATOMIC_REQUESTS: True, }}from django.db import transaction# 局部禁用事务trans…...
自动驾驶技术:改变交通出行的未来
自动驾驶技术,这个让人充满期待的技术,正在改变我们的交通方式,带来一种全新的出行体验。它可以让汽车、无人机等交通工具像人类驾驶一样自主行驶,通过人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作,实现…...
5.利用matlab完成 符号矩阵的转置和 符号方阵的幂运算(matlab程序)
1.简述 Matlab符号运算中的矩阵转置 转置向量或矩阵 B A. B transpose(A) 说明 B A. 返回 A 的非共轭转置,即每个元素的行和列索引都会互换。如果 A 包含复数元素,则 A. 不会影响虚部符号。例如,如果 A(3,2) 是 12i 且 B A.࿰…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
