学习笔记整理-正则表达式-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.࿰…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...
