0122-2-JavaScript正则表达式

《JavaScript正则表达式》

第一章 正则表达式 字符匹配

正则表达式是匹配模式,要么匹配字符,要么匹配位置!

  • 横向匹配 /ab[2,5]/c/g 匹配 abc, abbc,abbbc,abbbbc,abbbbbc,数字连续出现 2 到 5 次,会匹配 2 位、3 位、4 位、5 位连续数字

  • 纵向匹配 /a[1,2,3]c/ 匹配 a1c,a2c,a3c

  • 范围表示法 [1-3a-dE-G] 匹配 [123abdcEFG]

  • 排除字符组 [^abc] 匹配 除abc 之外的任意一个字符

1.1 常见简写形式
字符组含义
\d表示 ``[0-9]` ,digit(数字)的首字母 d,匹配数字
\D表示[^0-9] , 匹配 除数字以外的任意字符
\w表示[0-9a-zA-Z] ,word(单词)的首字母,匹配 数字、大小写字母、下划线
\W表示[^0-9a-zA-Z] , 匹配非单词字符
\s表示[\t\v\n\r\f] , 匹配空白符、空格、制表位、换行符、回车符、换页符
\S表示[^\t\v\n\r\f] , 匹配非空白符
^表示开头,如果单独使用,表示
$表示结尾,例 ``/^([01][0-9]
量词含义
{m,}至少出现 m
{m}等价于{m,m} , 出现 m
?等价于{0,1} , 出现或者不出现(您吃了吗?吃了/没吃)
+等价于 {1,} , 至少出现 1 次(每次只+1)
*等价于{0,} , 出现任意次,也有可能不出现(*星星 可能出现很多,也可能不出现)

🌰例子1️⃣:要匹配以下👇16进制颜色🎨

#ffbbad
#Fc01DF
#FFF
#ffE
// 就需要这样写
var regex = '/#([0-9a-zA-Z]{6} | [0-9a-zA-Z]{3})/g';
var string = "#ffbbad #Fc01DF #FFF #ffE";
console.log(string.match(regex));
// ["#ffbbad #Fc01DF #FFF #ffE"]

🌰例子2️⃣:要匹配以下👇时间

23:59
02:08
// 需要这样写
var regex = /^([01][0-9]|[2][0-3]):[0-5][0-9]$/;
// 第一位数字可以为 [0-2],当第 1 位为 "2" 时,第 2 位可以为 [0-3],
// 其他情况时,第 2 位为 [0-9], 第3位数字为[0-5], 第 3 位数字为 [0-5],第4位为 [0-9]。
console.log(regex.text("23:59")); // true
console.log(regex.text("02:08")); // true

🌰例子3️⃣:匹配以下👇年月日⏱️

2021-08-05
var regex = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
console.log( regex.test("2021-08-05"));//true

🌰例子4️⃣:匹配以下👇文件路径📂

F:\study\javascript\regex\regular expression.pdf
F:\study\javascript\regex\
F:\study\javascript
F:\
var regex = /^[a-zA-Z]:\\([^\\:*<>|"?\r\n/]+\\)*([^\\:*<>|"?\r\n/]+)?$/;
/* 匹配 ‘F:\’,需要使用 [a-zA-Z]:\\ 匹配 ‘文件名’, [^\\:*<>|"?\r\n/] 表示合法字符匹配 ‘文件夹\’,可用 [^\\:*<>|"?\r\n/]+\\匹配 多个 ‘文件夹\’,可用 ([^\\:*<>|"?\r\n/]+\\)*
*/
console.log( regex.test("F:\\study\\javascript\\regex\\regular expression.pdf") );
console.log( regex.test("F:\\study\\javascript\\regex\\") );
console.log( regex.test("F:\\study\\javascript") );
console.log( regex.test("F:\\") );
// => true
// => true
// => true
// => true

🌰例子5️⃣:匹配👇 id 🆔

<div id="container" class="main"></div>
var regex = /id="."?/;
var string = '<div id="container" class="main"></div>';
console.log(string.match(regex)[0]); // id="container"

第二章 正则表达式 位置匹配

正则表达式是匹配模式,要么匹配字符,要么匹配位置!

2.1 what is position?(什么是位置?)

位置又被称为(锚),是相连字符之间的位置。如下所示👇

position

2.2 How to match positions?(怎么匹配位置?)

ES5 中的 6 个锚:

含义
^脱字符,匹配开头
$美元字符,匹配结尾
\b单词边界, ^\w\w\W\W$之间的位置
\B非单词边界
(?=p)子模式,p 前面的位置,比如 (?=l),表示 “l” 字符前面的位置,he#l#lo
(?!p)子模式反面,\#h#ell#o#
3.3 位置的特性

可以理解为空字符 "",字符之间可以写成多个。

// "hello"可以写成:"hello" == "" + "h" + "" + "e" + "" + "l" + "" + "l" + "" + "o" + "";
var result = /^^hello$$$/.test("hello");
console.log(result);//true

🌰例子1️⃣:数字千位分隔符

// 把 123456 变成  123,456,789 
var result = "123456".replace(/(?=\d{3}+$)/g,','));
consle.log(result);// 123,456.789

🌰例子2️⃣:货币格式化

// 把1888 格式化成 $1888
function foemat(num){return num.toFixed(2).replace(/\B(?=(\d{3})+\b)/g,',').replace(/^/,"$$");
};
console.log(format(1888));// "&1,888,00"

🌰例子3️⃣:验证密码

// 至少包括两种字符
var regex = /^[0-9A-Za-z]{6,12}$/;

image-20210806153955569

// 包含某一种字符
var regex = /(?=.*[0-9])^[0-9A-Za-z]{6,12}$/;

image-20210806155004047

// 同时包含数字和小写字母,可以用 (?=.*[0-9])(?=.*[a-z]) 
var regex = /(?=.*[0-9])(?=.*[a-z])^[0-9A-Za-z]{6,12}$/;

image-20210806155447144

// 合并以上集中情况
var regex = /((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))^[0-9A-Za-z]{6,12}$/;

image-20210806160255546

第三章 正则表达式 括号的作用

模式说明
(ab)把ab看作一个整体,比如(ab)+表示"ab"至少连续出现一次
(?:ab)非捕获型分组。与 (ab) 的区别是,它不捕获数据
``(goodnice)``
``(?:goodnice)``
\num反向引用。比如 \2,表示引用的是第二个括号里的捕获的数据。

提取年月日,这里用到了 match 返回数组,[“整体效果”,“分组1”,“分组2”,“分组3”,“下标”]

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2021-08-06";
console.log(string.match(regex));
//["2021-08-06", "2021", "08", "06", index: 0, input: "2021-08-06"]

image-20210806161634881

替换年月日,yyyy-mm-dd 替换成 mm/dd/yyyy

var regex = /(\d{4})-(\d{2})-(\d{2})/;
var string = "2021-08-06";
// replace 中的,第二个参数里用 $1、$2、$3 指代相应的分组,等价于 month + "/" + day + "/" + year
var result = string.replace(regex, "$2/$3/$1/");
console.log(result);//"06/08/2021"
3.5 字符串 trim 方法

trim 方法用于去掉字符串开头和结尾的空白符

  • 非惰性匹配,效率高
function trim(str){return str.replace(/^\s+|\s+$/g,'');
}
console.log(trim("  kuishou  ")); // "kuishou"

image-20210806171343982

  • 惰性匹配
function trim(str){return str.replace(/^\s*(.*?)\s*$/g,"$1");
}
console.log(trim("  kuishou  "));// "kuishou"

image-20210806171458894

🌰例子:匹配 HTML成对标签

<title>Hello kuishou</title>
<p>How are you!</p>

开标签,可以使用正则 <[^>]+>

闭标签,可以使用正则<\/[^>]+>

var regex = /<([^>]+)>[\d\D]*<\/\1>/;
var string1 = "<title>Hello kuishou</title>";
var string2 = "<p>How are you!</p>";
console.log(regex.test(string1));//true
console.log(regex.test(string2));//true

image-20210806174258997

第四章 正则表达式的 拆分

操作符优先级

操作符描述优先级
\转义符1
(···)(?:···)(?=···)(?!···)[····]括号、方括号2
{m}{m,n}{m,}?*+两次限定符3
^$\元字符一般字符位置和序列4
````管道符
  • 匹配身份证

image-20210806223159285

  • 匹配IP地址
/^((0{0,2}\d|0?\d{2}|1\d{2}|2[0-4]\d|25[0-5])\.){3}(0{0,2}\d|0?\d{2}|1\d{2}|2[0-4]\d|25[0-5])$/

这个正则,看起来非常吓人。但是熟悉优先级后,会立马得出如下的结构:((…)\.){3}(…)

其中,两个 (…) 是一样的结构。表示匹配的是 3 位数字。因此整个结构是

3位数.3位数.3位数.3位数

然后再来分析 (…):(0{0,2}\d|0?\d{2}|1\d{2}|2[0-4]\d|25[0-5])

它是一个多选结构,分成5个部分:

  • 0{0,2}\d,匹配一位数,包括 “0” 补齐的。比如,“9”、“09”、“009”;
  • 0?\d{2},匹配两位数,包括 “0” 补齐的,也包括一位数;
  • 1\d{2},匹配 “100” 到 “199”; 2[0-4]\d,匹配 “200” 到 “249”;
  • 25[0-5],匹配 “250” 到 “255”。

image-20210806225356990

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

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

相关文章

C++ STL之string的使用及模拟实现

文章目录 1. 前言2. 介绍3. string类的使用3.1 string类的构造函数3.2 string类对象的容量操作3.3 string类对象的访问及遍历操作3.4 string类对象的修改操作3.5 string类对象的字符串操作3.6 string类的非成员函数 4. string类的模拟实现 1. 前言 C语言中&#xff0c;字符串是…

地图 - 实现有多条定位,显示多条定位,并且使用一个圆形遮罩层将多条定位进行覆盖

首先&#xff0c;需要在你的index.html模板页面头部加载百度地图JavaScript API代码&#xff0c;密钥可去百度地图开放平台官网申请 <script type"text/javascript" src"//api.map.baidu.com/api?typewebgl&v1.0&ak您的密钥"></script&…

代码随想录 Leetcode1047. 删除字符串中的所有相邻重复项

题目&#xff1a; 代码(首刷自解 2024年1月21日&#xff09;&#xff1a; class Solution { public:string removeDuplicates(string s) {if (s.size() < 2) return s;stack<char> t;for (int i 0; i < s.size(); i) {if (t.empty()) t.push(s[i]);else {if (s[i…

InnoDB的Buffer Pool

前置概念&#xff1a;一个数据页16KB&#xff0c;一个数据页可能有多个记录&#xff0c;即使我们只需要访问一条记录&#xff0c;需要把整个数据页加载到内存中&#xff0c;加载到内存后不是直接释放&#xff0c;而是缓存到内存当中&#xff08;当然对于buffer pool的缓存是在存…

若依管理系统搭建教程,ruoyi-vue环境搭建

环境部署 准备工作 JDK > 1.8 (推荐1.8版本) Mysql > 5.7.0 (推荐5.7版本) Maven > 3.0 运行系统 1、前往Gitee下载页面([https://gitee.com/y_project/RuoYi (opens new window)](https://gitee.com/y_project/RuoYi))下载解压到工作目录 2、导入到Eclipse&#…

ESP32-TCP服务端(Arduino)

将ESP32设置为TCP服务器 介绍 TCP&#xff08;Transmission Control Protocol&#xff09;传输控制协议&#xff0c;是一种面向连接的&#xff08;一个客户端对应一个服务端&#xff09;、可靠的传输层协议。在TCP的工作原理中&#xff0c;它会将消息或文件分解为更小的片段&a…

Day16 linuxC高级(存储类型 linux命令 shell命令)

文章目录 C补充标识常量存储类型1.auto // 自动型2.static&#xff1a;修饰变量和函数 // 静态型3.extern&#xff1a;外部引用4.register&#xff1a;寄存器类型 LinuxC高级简介&#xff1a;嵌入式系统(将软件嵌入到硬件里面)Linux起源查看操作系统版本内核系统架构系统关机或…

CSDN COC西安城市开发者社区2023年度线下聚会

1. 活动背景 CSDN始终致力于促进城市区域内尖端新型技术开发者交流&#xff0c;提供开放自由的切磋平台。在这个充满挑战和机遇的一年即将结束之际&#xff0c;通过本次聚会&#xff0c;汇聚西安本地各行各业的开发者朋友&#xff0c;回顾过去一年城市社区的成就和收获&#x…

Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)

目录 Spring&#xff08;概述特点IOC原理IOC并操作之bean的XML管理操作&#xff09;概述Spring是轻量级的开源的JavaEE框架Spring可以解决企业应用开发的复杂性Spring有两个核心部分ioc,aopSpring特点 loc(概念和原理)什么是 IOCIOC 底层原理IOC 过程图 IOC&#xff08;接口&am…

MySQL的一些综合运用

一些基本的语句&#xff1a; USE dept_emp; CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT 部门编号, dname VARCHAR (15) COMMENT 部门名称, loc VARCHAR (20) COMMENT 地理位置 ); -- 添加主键 ALTER TABLE dept ADD PRIMARY KEY (deptno); -- 添加数据 INSE…

前端转鸿蒙的就业前景如何?有必要学鸿蒙么?

学习鸿蒙开发是否有必要&#xff0c;取决于多个因素&#xff1a; 一、个人兴趣与职业规划&#xff1a; 如果你对华为鸿蒙操作系统&#xff08;HarmonyOS&#xff09;感兴趣&#xff0c;并且希望将这个平台作为你的职业发展的方向&#xff0c;那么学习鸿蒙开发是非常有意义的。…

MSG3D

论文在stgcn与sta-lstm基础上做的。下面讲一下里面的方法&#xff1a; 1.准备工作 符号。这里是对符号进行解释。 一个人体骨骼图被记为G(v,E) 图卷积&#xff1a; 图卷积定义 考虑一种常用于处理图像的标准卷积神经网络 (CNN)。输入是像素网格。每个像素都有一个数据值向…

x-cmd pkg | speedtest-cli - 网络速度测试工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 speedtest-cli 是一个网络速度测试工具&#xff0c;用于测试计算机或服务器与速度测试服务器之间的网络连接速度。 它使用 speedtest.net 测试互联网带宽&#xff0c;可以帮助用户获取网络的上传和下载速度、延迟等参…

【复现】SpringBlade SQL 注入漏洞_22

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 SpringBlade 是由一个商业级项目升级优化而来的SpringCloud微服务架构&#xff0c;采用Java8 API重构了业务代码&#xff0c;完全…

【C++初阶】第二站:类与对象(上) -- 下部分

前言&#xff1a; 本章知识点&#xff1a; 类对象模型、 this 指针 专栏&#xff1a; C初阶 目录 类对象模型 如何计算类对象的大小 类对象的存储方式猜测 结构体内存对齐规则 this指针 this指针的引出 this指针的特性 C语言和C实现Stack的对比 C语言实现 C实现 类对象模型 …

动态规划——炮兵回城【集训笔记】

题目描述 游戏盘面是一个m行n列的方格矩阵&#xff0c;将每个方格用坐标表示&#xff0c;行坐标从下到上依次递增&#xff0c;列坐标从左至右依次递增&#xff0c;左下角方格的坐标为(1,1)&#xff0c;则右上角方格的坐标为(m,n)。 游戏结束盘上只剩下一枚炮兵没有回到城池中&a…

ERP系统哪个好用?用友,金蝶,ORACLE,SAP综合测评

ERP系统哪个好用&#xff1f;用友&#xff0c;金蝶&#xff0c;ORACLE&#xff0c;SAP综合测评 ERP领域SAP、ORACLE相对于国内厂商如用友、金蝶优势在哪&#xff1f; SAP&#xff0c;ORACLE操作习惯一般国人用不惯&#xff1b;相对于国产软件&#xff0c;界面也很难看&#x…

AlmaLinux 9.3 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

Android学习之路(22) 从模块化到组件化

从模块化到组件化 一、从模块化到组件化 Android 应用项目 , 都存在一个应用模块 ( Application Module ) , 在 build.gradle 构建脚本中 , 第一个插件配置 com.android.application , 表明 该 Module 编译打包后的输出是 APK 安装包 ; 该项目可以直接运行 ; plugins {id co…

React进阶 - 11( 说一说 PropTypes 和 DefaultProps )

本章内容 目录 PropTypesDefaultProps 截止到上一节的内容&#xff0c;我们使用了一个 TodoList的案例&#xff0c;大概了解了 React的一些入门知识。从本节内容开始&#xff0c;我们将进入React进阶知识的学习 PropTypes 在组件拆分时&#xff0c;我们知道每个组件都有自己的…