JS正则表达式学习与实践
JS正则表达式学习笔记
- 1 学习笔记
- 1.1 字符类
- 1.2 量词和分支
- 1.3 标志
- 1.4 锚点
- 1.5 断言
- 2 常用正则
- 2.1 检查微信浏览器
- 2.2 检查移动端浏览器
- 2.3 检查中文字符
- 2.4 手机号严格
- 2.5 手机号比较宽松
- 2.6 手机号宽松
- 2.7 邮箱验证
- 2.8 金额格式
- 2.9 身份证号
- 2.10 至少8为有数字、大小写字符、特殊字符
- 3 其他实践
- 3.1 返回参数数字的千分位分隔符字符串
- 3.2 以字符串的形式返回文件名扩展名
1 学习笔记
1.1 字符类
1、点号“.”:标识除了换行之外的任易字符;
2、字符集"[]“:匹配方括号中列举的任意一个字符;
3、取反字符集”[^]“:匹配不在方括号中列举的任意一个字符;
4、字符范围”[a-z]“、”[0-9]“:匹配方括号字符范围内的字符;
5、单词字符”\w":用于查找字母、数字和下划线;
6、非单词字符"\W":匹配除字母、数字和下划线之外的字符;
7、数字字符 “\d”:仅用来匹配数字;
8、非数字字符"\D":匹配除数字之外的字符;
9、空白符"\s":仅匹配空白字符;
10、非空白符"\S":匹配除空白符之外的字符;
1.2 量词和分支
1、任意数次匹配"":在字符后面加上,表示一个字符完全不匹配或可以匹配多次;
2、正整数次匹配"+“:表示一个字符可以出现一次或多次;
3、可选匹配”?“:表示一个字符是可选的;
4、字符出现次数匹配”{n}“:表示一个字符出现的确切次数,可以在该字符的末尾,将它出现的次数写进大括号 {} 中,如 {1};
5、字符出现至少次数匹配”{n,}“:表示一个字符至少出现的次数,可以在该字符的末尾,将它出现的次数写进大括号 {min,} 中,如 {1,};
6、字符出现的次数范围匹配”{n,m}“:表示一个字符出现的次数范围,可以在该字符的末尾,将它出现的次数写进大括号 {min,max} 中,如 {1,4};
7、分支”|":竖线允许一个表达式包含多个不同的分支。所有分支用 | 分隔;
1.3 标志
1、全局标志"g":全局标志使表达式选中所有匹配项,如果不启用全局标志,那么表达式只会匹配第一个匹配项;
2、多行标志"i":正则表达式将所有文本视作一行。但如果我们使用了多行标志,它就会单独处理每一行;
3、忽略大小写标志"m":为了使我们编写的表达式不再大小写敏感,我们必须启用不区分大小写标志;
1.4 锚点
1、匹配字符串的开始"^“:所匹配的内容必须在字符串的头部;
2、匹配字符串的结尾”$“:所匹配的内容必须在字符串的尾部;
3、单词边界"字符\b”:匹配单词的开头或末尾;
4、非单词边界"字符\B":匹配不在单词开头或末尾的位置;
1.5 断言
1、正向先行断言"(?=)“:匹配结果后面必须跟着断言的内容,但该内容不作为匹配结果;
2、负向先行断言”(?!)“:匹配结果后面必须不跟着断言的内容,但该内容不作为匹配结果;
3、正向后行断言”(?<=)“:匹配结果前面必须跟着断言的内容,但该内容不作为匹配结果;
4、负向后行断言”(?<!)":匹配结果前面必须不跟着断言的内容,但该内容不作为匹配结果;
2 常用正则
2.1 检查微信浏览器
/MicroMessenger/i
2.2 检查移动端浏览器
/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
2.3 检查中文字符
/[\u4e00-\u9fa5]/gm
2.4 手机号严格
/^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1589]))\d{8}$/
2.5 手机号比较宽松
/^(?:(?:\+|00)86)?1[3-9]\d{9}$/
2.6 手机号宽松
/^(?:(?:\+|00)86)?1\d{10}$/
2.7 邮箱验证
/^([a-zA-Z]|[0-9])(\w|-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/
2.8 金额格式
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
2.9 身份证号
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
2.10 至少8为有数字、大小写字符、特殊字符
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
3 其他实践
3.1 返回参数数字的千分位分隔符字符串
// 返回参数数字的千分位分隔符字符串
function _comma(number) {// 补全代码return `${number}`.replace(/(\d)(?=(\d{3})+$)/g, '$1,');
}
3.2 以字符串的形式返回文件名扩展名
// 以字符串的形式返回文件名扩展名
const _getExFilename = (filename) => {// 补全代码return filename.replace(/(.*)(?=\..*)/, '')
}
持续更新……
相关文章:
JS正则表达式学习与实践
JS正则表达式学习笔记 1 学习笔记1.1 字符类1.2 量词和分支1.3 标志1.4 锚点1.5 断言 2 常用正则2.1 检查微信浏览器2.2 检查移动端浏览器2.3 检查中文字符2.4 手机号严格2.5 手机号比较宽松2.6 手机号宽松2.7 邮箱验证2.8 金额格式2.9 身份证号2.10 至少8为有数字、大小写字符…...
Java数据结构(五)——栈和队列
文章目录 栈和队列栈基本概念栈的模拟实现集合框架中的栈栈的创建栈的方法栈的遍历 栈的应用及相关练习括号匹配逆波兰表达式求值出栈入栈次序匹配最小栈 几个含"栈"概念的区分 队列基本概念队列的模拟实现循环队列双端队列集合框架中的队列队列的创建队列的方法队列…...
工具使用:nrm使用以及n模块
nrm nrm 是一个npm(Node Package Manager)的源管理器,它允许用户轻松地在不同的npm源之间进行切换。在Node.js的生态系统中,nrm 提供了一种方便的方式来管理registry源,这对于那些需要从不同的npm源下载或发布包的开发…...
匿名管道+进程池+命名管道
mkfifo name_pipe 创建管道文件。 命名管道: 路径文件名具有唯一性。 匿名管道: 进程池代码: #include<iostream> #include<unistd.h> #include<cstdlib> #include<cassert> #include<vector> #include&…...
【深度学习】【语音TTS】OpenVoice: Versatile Instant Voice Cloning,论文
https://github.com/myshell-ai/OpenVoice https://arxiv.org/abs/2312.01479 文章目录 摘要1 引言2 方法2.1 直观思路2.2 模型结构2.3 训练细节3 结果4 结论摘要 我们介绍了OpenVoice,一种多功能的即时语音克隆方法,只需参考说话者的短音频片段即可复制其声音,并生成多语…...
一六零、云服务器开发机配置zsh
切换shell 在Linux中默认使用/bin/bash,在用户创建时,会自动给用户创建用户默认的shell。默认的shell就是/bin/bash。要修改shell将其设置为/bin/ksh,有两种方法方法 # 方法一: chsh -s /bin/ksh chsh -s /bin/zsh # 方法二: usermod -s /b…...
[ZJCTF 2019]NiZhuanSiWei1
打开题目 php代码审计 .从代码中可以看出要求,以get方式传递text,file,password三个参数。 3.第一层验证if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")) 传入text,而且file_get_contents($text,r)之后内容…...
【网络安全】副业兼职日入12k,网安人不接私活就太可惜了!
暑假来了,很多同学后台私信我求做兼职的路子,这里,我整理了一份详细攻略,请大家务必查收,这可能会帮你把几个学期的生活费都赚够! Up刚工作就开始做挖漏洞兼职,最高一次赚了12k,后面…...
[STM32]HAL库实现自己的BootLoader-BootLoader与OTA-STM32CUBEMX
目录 一、前言 二、BootLoader 三、BootLoader的实现 四、APP程序 五、效果展示 六、拓展 一、前言 听到BootLoader大家一定很熟悉,在很多常见的系统中都会存在BootLoader。本文将介绍BootLoader的含义和简易实现,建议大家学习前掌握些原理基础。 …...
鸿萌数据备份服务:中小型企业如何策划及实施云备份方案
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据安全、数据备份、数据恢复、数据清除等解决方案与服务。 对于中小型企业来说,保护运营数据(客户记录、财务文档和项目文件)的重要性不言而喻…...
x264 编码过程中延迟逻辑分析
编码延迟相关参数 相关参数:在 common.h文件中 frames 结构体中声明关于编码延迟的变量int i_delay; /* Number of frames buffered for B reordering */ int i_bframe_delay; int64_t i_bframe_delay_time;编码延迟计算 编码延迟计算:在x264_encoder_open函数和x264_…...
前端框架 element-plus 发布 2.7.8
更新日志 功能 组件 [级联选择器 (cascader)] 添加持久化属性以提升性能 (#17526 by 0song)[日期选择器 (date-picker)] 类型添加月份参数 (#17342 by Panzer-Jack)[级联选择器 (cascader)] 添加标签效果属性 (#17443 by ntnyq)[加载 (loading)] 补充加载属性 (#17174 by zhixi…...
2024.8.1(前端服务器的配置以及tomcat环境的配置)
回顾 [roottomcat ~]# cd eleme_web/public/img/ [roottomcat img]# ls 1.jpg [roottomcat public]# cd [roottomcat ~]# cd eleme_web/ [roottomcat eleme_web]# cd src [roottomcat src]# vim views/HomeView.vue [roottomcat src]# nohup npm run serve ctrlc后网页不出…...
使用 宝塔面板 部署 语料库php网站
【语料库网站】宝塔面板 在线部署全过程 代码仓库:https://github.com/talmudmaster/RedCorpus 网站介绍 语料库提供双语文本检索和分享功能。供英语、翻译相关专业的爱好者,学生和老师学习使用。 该网站是对BiCorpus开源项目的二次开发。 技术栈&am…...
springboot农产品报价系统-计算机毕业设计源码37300
摘 要 本研究基于鸿蒙系统,设计开发了一款农产品报价系统小程序,旨在帮助商家与买家更便捷、高效地进行交易。该系统利用鸿蒙系统的优势,实现了跨平台应用程序的开发,同时利用定位技术和数据采集技术,为用户提供了个性…...
食源送系统项目的测试
一、对整个系统编写测试用例 功能测试 性能测试 兼容性测试 易用性测试 安全测试 二、接口测试 针对接口的功能测试,也就是检验接口是否按照接口文档输入输出 2.1 使用Postman发送HTTP请求 2.2 使用Java TestNG 编写自动化测试用例 登录界面功能 package com.sky.…...
JS解构赋值
可以将数组中的值或对象的属性取出,赋值给其他变量。 例如 Let [a, …b] [1, 2, 3]; // a 1, b [2, 3]; let {a, b, …rest} {a : 10, b : 20, c : 30, d : 40}; // a 10, b 20, rest {c : 30, d : 40};...
多多OJ评测系统 前端项目环境初始化 安装Vue脚手架 引入Arco Design组件
目录 确定环境 命令行输入 装一下脚手架 监测一下是否安装成功 创建一个项目 选择一系列的配置后 我们打开webStorm 配置脚手架后我们先运行 我们这边能获取到网址 其实我们脚手架已经帮我们做到了 接下来要引入相关的组件 选择用npm进行安装 我们建议的是完整引入…...
OceanBase 配置项系统变量实现及应用详解(4):新增系统变量
本专题的前几篇文章已经详细阐述了OceanBase的配置项和系统变量的基础用法,并对配置项的源码进行了剖析。但有一些同学可能还对系统变量的实现方式有兴趣,并希望能够像自定义配置项那样,新增一个系统变量。 本文将围绕“如何新增系统变量”这…...
`CAUTION: request is not finished yet!`
前言: 在一次与后台的接口联调中,数据量很大,导致页面卡顿,经排查,浏览器的某个接口显示CAUTION: request is not finished yet! 之前没遇到过这个错误,获取数据的接口开始进行请求,状态码返回…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
