当前位置: 首页 > news >正文

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(/(.*)(?=\..*)/, '')
}

持续更新……

http://www.lryc.cn/news/412602.html

相关文章:

  • Java数据结构(五)——栈和队列
  • 工具使用:nrm使用以及n模块
  • 匿名管道+进程池+命名管道
  • 【深度学习】【语音TTS】OpenVoice: Versatile Instant Voice Cloning,论文
  • 一六零、云服务器开发机配置zsh
  • [ZJCTF 2019]NiZhuanSiWei1
  • 【网络安全】副业兼职日入12k,网安人不接私活就太可惜了!
  • [STM32]HAL库实现自己的BootLoader-BootLoader与OTA-STM32CUBEMX
  • 鸿萌数据备份服务:中小型企业如何策划及实施云备份方案
  • x264 编码过程中延迟逻辑分析
  • 前端框架 element-plus 发布 2.7.8
  • 2024.8.1(前端服务器的配置以及tomcat环境的配置)
  • 使用 宝塔面板 部署 语料库php网站
  • springboot农产品报价系统-计算机毕业设计源码37300
  • 食源送系统项目的测试
  • JS解构赋值
  • 多多OJ评测系统 前端项目环境初始化 安装Vue脚手架 引入Arco Design组件
  • OceanBase 配置项系统变量实现及应用详解(4):新增系统变量
  • `CAUTION: request is not finished yet!`
  • 科研绘图系列:R语言GWAS曼哈顿图(Manhattan plot)
  • DjangoRF-11-创建testcases子应用--任务模块
  • 服务器数据恢复—SAN环境下LUN被重复映射导致写操作不互斥的数据恢复案例
  • Linux系统安全加固:从防火墙到SELinux策略
  • 排序算法:归并排序,golang实现
  • CSS 的工作原理
  • 买完就后悔?只需几步教你 Apple 怎么申请退款
  • 【保卫战】休闲小游戏 链游
  • 如何构建自己的交易机器人开发环境
  • 解决WordPress文章引用的图片不显示问题
  • 商业银行国际结算规模创新高,合合信息AI助力金融行业智能处理多版式文档