元字符的详细解析

2023-11-19

上一篇文章介绍了正则的用处以及正则中这些元字符的基本含义,但是如果我们只知道那些元字符的含义,不知道怎么使用和加以练习,那么对于正则我们还只是看见了门槛,并没有踏入,那么本篇文章就让我们迈起脚步正式走入正则的世界吧。let’s go!

我的学习方式是:记忆元字符的含义 + 例子消化 + 案例练习

首先:咱们的思维导图来喽

一、正则的匹配和捕获

  • 匹配:test():查看字符串是否符合这个正则
  • 捕获:exec()

关于这两个方法的具体介绍,会在下一篇文章中介绍,本文章的主要内容是元字符的具体含义、使用

二、元字符详细解析

重点来喽,搬好小板凳,准备好好听课,咳咳咳!

1. ^ $
  • ^:以那个元字符开头
  • $:以那个元字符结尾
  • \d:0-9的数字
  • {n}:出现n次
    • 注意点:想要使用这个,正则表达式中必须含义结尾,否则大于n的次数也是可以测试通过的,只不过捕获的时候还是捕获n个
  • [n-m]:n与m之间的任意值即可,包括n和m

例子

//匹配的是:以数字开头的字符串
let reg = /^\d/;  
console.log(reg.test('name'));   //false
console.log(reg.test('2020name'));  //true
console.log(reg.test('name2020'));   //false
//匹配的是:以数字结尾的字符串
let reg = /\d$/;  
console.log(reg.test('name')); //false
console.log(reg.test('2020name'));  //false
console.log(reg.test('name2020'));  //true
// ^/$两个都不加匹配的是:字符串中包含符合规则的内容即可
let reg1 = /\d/;
//^/$两个都加匹配的是:字符串只能是和规则一致的内容
let reg2 = /^\d$/

案例加强

需求:验证手机号码(11位,第一个数字是1,第二位是3-9)

//含义就是以1开头,第二个数字为3-9中的任意一个数字,其余9位随意数字(注意:必须写结尾,如果不写结尾长度大于9也是返回true可以匹配的)
let reg = /^1[3-9]\d{9}$/;
2. \
  • \:转义字符
  • .:除\n之外的任意数字
    例子
// 匹配的是:以2开头 以3结尾 中间是出来换行之外的任意字符
let reg = /^2.3$/;
console.log(reg.test('2.3')); //true
console.log(reg.test('2@3')); //true
console.log(reg.test('23')); //false
// 匹配的是:以2开头 以3结尾 中间是小数点
//=》也就是匹配2.3 这里的‘.’转义为了普通的‘.’
let reg = /^2.3$/;
console.log(reg.test('2.3')); //true
console.log(reg.test('2@3')); //false

案例加强

需求:匹配字符串‘\ \d’,设计到了\的转义 (注意:在字符串中也有一些特殊意义的,他们也是需要转义的。比如\n在字符串中不是字符串\n而是换行)。因此对于此题的需求‘ \ \d’,代表的是需要匹配一个\和一个d

let str = '\\d',
    reg = /^\\d$/;
console.log(reg.test(str));
3. x|y
  • x|y:x或y
  • ():分组或提高优先级

直接x|y会存在很乱的优先级问题,一般我们写的时候都伴随着小括号进行分组,因为小括号改变处理的优先级 => 小括号:分组

例子

//匹配的是:以18开头或者以29结尾的都可以
//以下的匹配结果都为true
let reg = /^18|29$/;
console.log(reg.test('18'));
console.log(reg.test('29'));
console.log(reg.test('129'));
console.log(reg.test('189'));
console.log(reg.test('1829'));
console.log(reg.test('182'));
//匹配的是:18或者29中的一个
let reg = /^(18|29)$/;
console.log(reg.test('18'));
console.log(reg.test('29'));
console.log(reg.test('129'));
console.log(reg.test('189'));
console.log(reg.test('1829'));
console.log(reg.test('182'));
4.[]
  • 中括号出现的字符一般都代表本身的含义(特殊字符就是代表一个普通的符号:‘.’就是代表‘.’,而不是代表除换行之外的任意字符了)
  • 中括号中不存在多位数

例子

//匹配的含义是:只能是@或者+的
let reg = /^[@+]$/;
console.log(reg.test('@')); //true
console.log(reg.test('+')); //true
console.log(reg.test('@@')); //false
console.log(reg.test('@+')); //false
//匹配的含义是:\d还是代表0-9
let reg = /^[\d]$/;
console.log(reg.test('9')); //true
console.log(reg.test('\\')); //false
console.log(reg.test('d')); //false
//匹配的含义是:1或者8
let reg = /^[18]$/;
console.log(reg.test('1')); //true
console.log(reg.test('8')); //true
console.log(reg.test('18')); //false
//匹配的含义是:1或者0-2或者9
let reg = /^[10-29]$/;
//匹配的含义是:1或者0-2或者9或(或)
let reg = /^[(10-29)]$/;

三、常用的正则表达式

3.1 验证是否为有效数字

规则分析:

  • 1.可能出现+ -号、也可能不出现,但是出现也是只有一个;
  • 2.整数位是一位的时候可以是0-9,多位的时候首位不能是0;
  • 3.小数部分可能有也可能没有,一旦有后面必须有一位:小数点+数字
/^[+-]?(\d|([1-9]\d+))(\.\d+)?$/
3.2 验证密码

规则分析

  • 数字、字母、下划线
  • 6~16位
///使用常规的写法(不用正则)
let val= userPass.value;
function check(val){
  if(val.length>16 || val.length<6){
    alert('长度不符合');
    return;
  }
  let area = ['a','b',...'_'];//数字,字母、下划线
  for(let i = 0;i<val.length;i++){
    let char = val[i];
    if(!area.includes(char)){
      alert('必须包含数字字母下划线');
      return;
    }  
  }
}
//使用正则验证
/^\w{6~16}$/
3.3验证真实姓名

规则:

  • 1.汉字:/1$/;
  • 2.名字长度2-10位;
  • 3.可能有译名:·汉字
//补充一个怎么打出在中间位置出现的点,哈哈,我在敲的时候也没有找到,问了度娘才知道:
//中文状态下,ESC下面的那个键就是(中文状态中文状态中文状态,重要的事情说三遍。。。哈哈)
/^[\u4E00-\u9FA5]{2,10}(·[\u4E00-\u9FA5]{2,10})?$/
3.4 验证邮箱

规则:

  • 邮箱的名字以‘数字字母下划线-.’几部分组成,但是-/.不能连续出现也不能作为开头 \w+((-\w+)|(.\w+))*;
  • @ 后面可以加数字字母,可以出现多位 @[A-Za-z0-9]+ ;
  • 对@后面名字的补充:多域名 .com.cn ;企业域名 (.|-)[A-Za-z0-9]+)*
  • .com/.cn等域名 .[A-Za-z0-9]+
/^\w+((-\w+)|(\.\w+))*@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/
3.5 身份证号

规则

  • 18位
  • 最后一位是数字或者X
  • 前6位是省市县
  • 后四位是年
  • 后两位是月 01-12
  • 后两位是日 01-31
  • 最后四位
  • 最后一位:X或者数字
  • 倒数第二位:偶数:女 奇数:男
    小括号分组的作用:分组捕获,不仅可以把大正则匹配信息捕获到,还可以单独捕获到每个小分组的内容
/^([1-9]\d{5})((19|20)\d{2})([1-9]|10|11|12)([1-9]|[1-2]\d|30|31)\d{3}(\d|x)$/i

以上就是使用正则中元字符的具体使用情况和项目中使用到的场景,可能不是特别全,写的不是特别细,但是小编也在努力学习中,提高知识的层次上,文学能力也在提高 (咳咳!上学的时候语文就学的不咋样,可能我就是理工科中那个学习不怎么样,但是理科生身上的那种标签却。。。哈哈,其实我们理科生偶尔也是浪漫的,不是那么的直。。。)


  1. \u4E00-\u9FA5 ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

元字符的详细解析 的相关文章

  • 你工作效率低,可能是因为不会Python

    前言 你是不是感觉你的工作非常无聊 每天有大量的重复性的工作要做 比如在我的工作中 就有很多类似的动作 每天早上要看我们DevOps流水线跑出的结果 查看各个微服务中的重复代码率是多少 有没有增加 CleanCode中的各项指标怎么样 代码
  • 微信加拿大服务器,微信新功能,在加拿大也可以任意刷人民币了

    原标题 微信新功能 在加拿大也可以任意刷人民币了 2018 6 11 加币 人民币 4 877 加币 美金 0 757 近日 微信悄悄上线了一项新功能 这就是 亲属卡 什么是 亲属卡 简单来说 就 是 你消费 别人买单 这项功能对于我们身在

随机推荐

  • 2021-01-10

    RIP 协议 一 合理分配IP地址 二 配置IP地址 三 运行RIPV 2 例R1 四 配置缺省路由 五 RIPV2 认证 例R1 六 配置空接口路由 防环 例R1 七 全网可通
  • 成员变量与局部变量的区别有哪些

    成员变量是在类内部定义的变量 在类的任何方法中都可以直接使用 其作用域为整个类 成员变量有默认值 如果没有给定初始值 数值类型默认为0 布尔类型默认为false 对象类型默认为null 局部变量是在方法 代码块 循环等内部定义的变量 其作用
  • 【羊了个羊】Burp抓取IOS微信小程序数据包

    描述 最近 小游戏 羊了个羊 在朋友圈刷屏 网友纷纷表示 游戏开发者多少有个病要治 本文记录 如何使用Burp抓取ios微信小程序数据包 工具准备 Burp 苹果手机 wifi 设置记录 手机和电脑连接同一wifi burp设置新代理 手机
  • 人脸分割 人脸解析 源码推荐

    2021年 有预训练 resnet50 126m 测试代码 python face warping test py i 0 e rtnet50 decoder fcn n 11 d cuda 0 Command line arguments
  • html js c 代码大全,js常用汇总

    javascript 代码库JS函数修改html的元素内容 及修改属性内容 document getElementById aid innerHTML World document getElementById aid href http
  • CBAM——即插即用的注意力模块(附代码)

    论文 CBAM Convolutional Block Attention Module 代码 code 目录 前言 1 什么是CBAM 1 Channel attention module CAM 2 Spatial attention
  • hexo的美化——拓展篇

    基础知识 css样式 hexo themes next source css 是next主题的样式文件 决定主题的外观 hexo themes next source css main styl 汇总css文件夹中所有的样式 hexo th
  • 一段有意思的异步代码片段

    毫不夸张的说 下面的代码会有一半的人输出错误 上代码 async function getCount id return id let count 0 async function addCount num count await getC
  • 深度学习入坑笔记之二---手写体图像识别问题

    深度学习入坑笔记之二 手写体图像识别问题 目录 前言 通过softmax进行手写体图像建模及识别 数据导入 softmax建模 训练模型 模型评估 通过卷积网络进行手写体图像建模及识别 初始化权重 定义卷积层及池化层 添加层 训练及评估模型
  • golang1.9编译openwrt运行程序 ,window7下liteide编译

    网上看了好多资料发现都很过时了 基本都是用的https github com gomini go mips32编译的 但是go1 9早就支持mips了 设置好编译参数 开始build 这时在go pkg下会出现linux mips目录 就是
  • 本地镜像发布到私有库

    情景 涉及机密的文件 公司不可能提供镜像给公网 所以需要创建一个私有仓库用于存放敏感的镜像 Docker Registry帮助我们搭建私有的仓库供团队使用 相当于一个私有的hub仓库 本地拉取registry镜像 运行私有库 相当于自己本地
  • BugkuCTF-MISC题FileStoragedat

    知识点 FileStorage是微信存储数据的一个文件夹 该文件夹下存放的是经过加密后微信里发送 接受的图片而形成的文件后缀为dat的文件 就是微信dat文件 想要做出此题 就得先弄懂微信dat文件形成的原因 微信的dat文件 将微信图片的
  • Java Elasticsearch多条件分组聚合查询

    需求 在项目开发中 需要从elasticsearch中查询日志数据 先统计每一天的日志调用量 然后在每一天的分组聚合基础上 再分组聚合统计成功和失败的日志调用量 代码 DateHistogramAggregationBuilder aggr
  • Python爬虫——多线程爬虫如何实现?

    Python爬虫 多线程爬虫 1 多任务 2 主线程与子线程 2 1 何谓线程 主线程及子线程 2 2 查看线程数量 2 3 创建子线程 2 4 线程间的通信 3 线程间的资源竞争 4 互斥锁与死锁 4 1 互斥锁 4 2 死锁 4 3 避
  • 我的第一个Imx6ULL应用《百度图像识别》

    Imx6ULL填坑计划 此次用到的所有资料我都放到了奶牛快传里 下载的话速度极快 https c t work s fe0b4a22171342 我买这个板子已经很久了 跟着野火正点原子的教程踉踉跄跄学了一段儿 对很多基础知识也是一知半解
  • SSHDroid(SSH Server for Android)通过PC或命令连接android

    1 下载berserker android apps sshdroid apk 如果你懒的下载 给我留言 我会发给你 2 安装到手机 显示如图 简单解释一下 一般android系统没有root权限 Wifi Connection 是你连接的
  • JavaWeb项目相关的依赖(Maven仓库)

    Maven仓库 SSM整合 依赖 junit
  • Springboot自动装配原理详解

    Springboot自动装配原理 主程序类 主入口类 SpringBootApplication public class MysteelEnglishWebApplication public static void main Strin
  • 怎么通过SPSS的神经网络模型预测结果

    神经网络模型是数据分析常用的模型 它广泛应用于众多领域 比如 医疗 人工智能 深度学习 语音 机器人等 它能通过现有数据经过神经网络模型训练得到训练模型 再将模型运用于预测数据集 进而得到预测结果 并且将预测趋势应用于各个领域 IBM SP
  • 元字符的详细解析

    上一篇文章介绍了正则的用处以及正则中这些元字符的基本含义 但是如果我们只知道那些元字符的含义 不知道怎么使用和加以练习 那么对于正则我们还只是看见了门槛 并没有踏入 那么本篇文章就让我们迈起脚步正式走入正则的世界吧 let s go 我的学