正则表达式学习的个人小结

2023-05-16

正则表达式是对字符串的一种操作,运用到JS中可以帮助我们去寻找符合要求的字符串(表单验证)。

http://regexper.com

(这个网站可以把正则表达式输入进去然后用图形显示出来,因为是国外的网站,国内登入可能比较慢,甚至进不去,但是可以把把这个东西从git下载到本地,然后在本地http://localhost:8080端口打开,具体操作可以参考其他博客)

其实我觉得正则表达式的学习过程并不是很难,但是因为需要记住的东西有点多,所以需要用实例代码去加深自己的记忆,我可能只是简单的写一些例子,这是远远不够的,因为这个只是自己在刚刚学完的一点小小的总结,如果有人看到的话,希望自己可以多写写!

首先,在我写学习记录的时候,刚刚好一天碰到几次关于'/'与'\'写错了的事情,其实在正则表达式之中这个问题好像更加明显了,去看别人的博客,对它的解释也是蛮多的,觉得有用的一句话是“  "/" 分隔符,"\" 转义字符   ”,而且显示生活中"/"用得比较多,具体更多用法的可以看(路径中 斜杠/和反斜杠\ 的区别)总结得还是比较全面的。(我经常写错,如果下面有些感觉这两个符号我写串了,没错,一定是我写错了,不过这里我已经反复确认过红色字体没有错误了!)

正则表达式的写法是/…………/,中间是具体去匹配的内容

/…………/,最后面可以写(g,i,m)具体的意思是:(这里暂时就没有需要用到'/'的地方了,如果需要匹配的就是/就另外再说了)

(这里的测试可以直接打开f12,在控制台里面输入,然后回车,我这里的这个小例子,运用到了JS中的replace函数,这里是在JS中的一个用法,后面会总结在JS中的其他用法,也可以在https://jsbin.com/中打入输出)

这个小栗子里面的内容现在看可能有点不懂,这是因为某些内容在正则中已经专门去用来表示某些内容了

为什么叫做预定义,就是像写C/C++/JS里面有些字母已经有了特殊的含义,在别的地方用的时候代表的就是程序已经写好的意思,这里的也是类似

我只是列出了部分内容,还有很多,但是用得比较多的基本就是这些

如果在写代码的时候就是需要匹配‘\d’,而不是数字,如果直接写程序就会认定是数字,这个时候就得用到'\',在这里的意思是转义(只有‘\’符号需要转义,字母不需要转义),具体写几个代码表示一下

如果直接写,是会报错的(语法错误)

首先在/……/,最外面有一个g,表示全局匹配,即满足要求的都替换,如果没有g,则满足要求的第一个进行替换,在里面的内容是'\/','\'是转义的意思,就是告诉程序,接下来我写的东西因为被你们占据了,所以需要转义一下,让你们知道我想表示的是我自己本身。

最后面的那个就是我要匹配的是两个'//',如果只写一个的话,它不会自动匹配两个,所以写转义符,只表示我转义的是后面的一个符号,不是多个!

这个就顺便回答了如何匹配转义符号,就是\\,表示转义的字符是 \

那个小圆点我实在没找出来就打的汉字,这些匹配的时候需要转义

这里大概总结了下元字符在程序中的具体应用,可以自己尝试着写一些代码去了解具体匹配的情况,或者在http://regexper.com中去看看具体是怎么表示的。

在量词的匹配的时候,有一个{n,m},表示匹配的次数在n-m次之间,但是如果有多个匹配的到底是匹配n次还是m次呢?

这个就得引入到这个贪婪模式(类似于贪吃蛇一样,想多吃一点),那么程序就想多匹配一点,有k(k>=n)个就匹配k次,最多是匹配m次,

到这里可以看到我写的代码都是简单的替换成字母或者简单的东西,如果需要把匹配到的东西拿出来需要怎么操作呢?

就是用括号括起来看成一个整体去表示这部分匹配的东西是我需要的,需要特殊看待,这个就可以写到程序中(爬虫),去获取我需要的内容,并且按照一定的格式显示出来

有时候在匹配的时候有很多内容有着相似的特点,就是都能够匹配出来,但是呢有时候还有特别的要求,就像一个班级里面有几个人叫小明,匹配到了小明,但是要求匹配到的小明有一个妹妹叫小红,或者没有一个叫小红的妹妹,或者其他条件,这个时候就需要用到前瞻(后顾),因为后顾JS不支持,所以我也没有总结,就只具体说一下前瞻:

也许有人就会说不需要这么麻烦我直接一起写出来去匹配不就好啦,但是一般我们是对匹配出来的内容有其他操作,就像你要叫小明去打扫卫生,是有妹妹的小明,如果不去前瞻的话,那么表示你想要小明小红一起去打扫卫生,而不是小明一个人,这里这么使用只是缩小筛选的范围。

注意到我们去检验写的代码是否准确是用的JS里面的replace函数去替换,有没有直接可以去检测返回true or false的一个专门的函数嘞?既然我这么说了,肯定是有的,那就是test,这个是用于测试字符串参数中是否存在匹配的正则表达式模式的字符串,返回值是true  false,但是在使用中的时候会有一些需要注意的地方

举个栗子吧:

/w表示单词字符,(字母、数字、下划线)可以翻阅上面的内容有具体的介绍

表面看上去加了g和没有加g(是否全局匹配)没有什么区别,但是这是不可能的!在秘密之中,全局匹配改变了一个叫做lastIndex的东西,

什么是lastIndex,自己可以百度看官方解释,我自己的理解就是:因为全局匹配不想非全局匹配,非全局匹配匹配完之后就不会继续匹配下去了,而全局匹配不同,还要继续去检索有没有符合要求的,那个如果每次都重新开始是不现实的,那么就得有一个变量去记录这个下次开始的地方在哪里,lastIndex就是这个功能,就是记录下一次我匹配的下标,在非全局匹配的情况下,lastIndex恒等于0;

举个栗子:

我打印三次reg2的内容,发现前面两次是一样的返回true,为什么第三次是false呢?就是这个lastIndex有区别,我们可以试着打印出来

这样一来我们就看出来了区别,这个lastIndex不断在更新,在第一次匹配到a符合要求之后返回true,然后下一次应该从b开始匹配,则lastIndex就是b的下标1,以此类推,变成一个圆不断在变化。

还有另外一个叫做exec

这个和test类似,只是把匹配到的内容提取出来,就像我需要匹配字母,具体不知道是那个字母,这个时候我们就可以运用这个去打印出来具体是哪一个字母。

举个栗子:

如果我var ans2 = reg2.exec(ts),则在定义的时候已经调用了一次exec函数。返回的exec数组里面包含的内容:如果不匹配就是NULL,如果匹配首先是匹配到的内容,然后就是每一个分组的内容。

最后面说一下正则表达式在JS里面的应用,主要有四个

 

 

 

正则表达式的基本内容大致梳理在此,如果后面碰到了其他情况会给予添加

18-11-11:汉字的匹配区间\u4e00——\u9fa5

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

正则表达式学习的个人小结 的相关文章

随机推荐

  • PVE虚拟机篇-PVE虚拟机安装

    安装包下载 前往Proxmox Virtual Environment下载ISO镜像文件 xff0c 可以直接选择最新版本 但是如果没有海外线路一般下载十分缓慢 xff0c 甚至下不动 xff0c 所以可以去中科大镜像源 xff1a 中科大
  • PVE虚拟机篇-pve软件换源

    起因 由于安装pve的第二天突然发现后台显示执行错误 xff0c 更新软件源失败 xff1a 更新软件源方法 注释企业源 echo 34 deb https enterprise proxmox com debian pve bullsey
  • 解决android opengl glReadPixels 慢的问题 二

    解决android opengl glReadPixels 慢的问题 二 上篇讲到使用pbo解决glreadpix慢的问题 xff0c 但是效果不太理想 xff0c 后来参考链接 xff1a OpenGL Pixel Buffer Obje
  • Tesseract 3.02中文字库训练

    下载chi sim traindata字库 下载tesseract ocr setup 3 02 02 exe 下载地址 xff1a http code google com p tesseract ocr downloads list 下
  • Windows下使用pip安装包 出错 TLS/SSL

    Windows下使用pip安装包的时候出现如下问题 xff1a WARNING pip is configured with locations that require TLS SSL however the ssl module in
  • C++进阶(七)-模板与群体数据8

    选择排序 选择排序的基本思想 每次从待排序序列中选择一个关键字最小的元素 xff0c xff08 当需要按关键字升序排列时 xff09 xff0c 顺序排在已排序序列的最后 xff0c 直至全部排完 例9 12 简单选择排序函数模板 tem
  • Ubuntu 20.04 WARNING笔记(长期更新,欢迎交流)

    记录使用Ubuntu 20 04过程的报错 以及解决 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 循环嵌套例题

    循环嵌套例题 1 例题1 span class token comment 代码 span span class token keyword for span span class token punctuation span span c
  • java实现学生信息管理(对象数组实现)

    java实现学生信息管理 xff08 对象数组实现 xff09 1 例题 实体类 学生类 id 姓名 xff0c 年龄 xff0c 性别 xff0c 成绩 需要使用数组保存学生信息 Student allStu 需要完成的方法 1 根据学生
  • java基础语法思维导图

    java从入门到放弃 简单总结之前的
  • 学生管理系统2.0 (可对学生数组扩容)

    学生管理系统2 0 可对学生数组扩容 1 用户可初始化数组长度 xff0c 不够用时可以扩充数组容量 尝试完成以下功能 实体类 学生类 id 姓名 xff0c 年龄 xff0c 性别 xff0c 成绩 需要使用数组保存学生信息 Studen
  • LinkedList和Set

    LinkedList和Set 1 LinkedList 1 1 LinkedList概述 底层存储数据是一个双向链表结构 自行车链子 就是一个生活中链表结构 xff0c 环环相扣 xff0c 替换 xff0c 拆除非常方便 1 2 Link
  • shiro与springboot整合

    Shiro 与 SpringBoot 的整合 1 创建SpringBoot工程 xff0c 导入依赖 span class token generics function span class token punctuation lt sp
  • Vue

    Author Thor Version 9 0 1 文章目录 一 Vue简介1 1 简介1 2 MVVM 模式的实现者 双向数据绑定模式1 3 其它 MVVM 实现者1 4 为什么要使用 Vue js1 5 Vue js 的两大核心要素1
  • android AudioRecord 音频录制 噪音消除

    android AudioRecord 音频录制 噪音消除 因为公司APP做适配 xff0c 一些低端机的噪音比较严重 xff0c 所以再一些低端机上做了简单除噪音功能 xff0c 1 xff0c 由于APP使用场景的限制 xff0c 所以
  • springboot 常用注解

    springboot 常用注解 在spring boot中 xff0c 摒弃了spring以往项目中大量繁琐的配置 xff0c 通过自身默认配置 xff0c 极大的降低了项目搭建的复杂度 在spring boot中 xff0c 大量注解的使
  • X86架构基本汇编指令详解

    文章目录 汇编指令伪指令1 MODEL2 STACK3 ENDP4 END 汇编指令1 MOV xff1a 将源操作数复制到目的操作数2 MOVZX 和 MOVSX3 XCHG 交换两个操作数内容4 INC 和 DEC5 ADD 和 SUB
  • 详解 C++ 对象模型

    文章目录 何为 C 43 43 对象模型 xff1f 基本 C 43 43 对象模型C 43 43 对象模型中加入单继承1 无重写的单继承2 有重写的单继承 C 43 43 对象模型中加入多继承C 43 43 对象模型中加入虚继承1 简单虚
  • Ubuntu 扩大/home磁盘分区

    在删除或重命名home目录之前 xff0c 千万确保你可以使用root账户 xff01 xff01 xff01 sudo 无用 xff01 xff01 xff01 根目录一共212G xff0c 已经使用了80 了 xff0c 其中130G
  • 正则表达式学习的个人小结

    正则表达式是对字符串的一种操作 xff0c 运用到JS中可以帮助我们去寻找符合要求的字符串 表单验证 http xff1a regexper com xff08 这个网站可以把正则表达式输入进去然后用图形显示出来 xff0c 因为是国外的网