关于正则的二次理解

正则
在我个人的理解上就是利用文本模式提取其模式对应的字符串,关于文本模式【而不是正则尾部的修饰符】的组成,个人理解就是由原义字符,特殊字符,转义字符,量词,大括号子表达式缓冲区一个一个子模式组成。

关于正则中的特殊字符,修饰符,量词的具体描述就不在这累述了,可以参考菜鸟教程上,一步一步慢慢看就会懂,在这里我就写下我今天重新看正则及验证的一些感悟

感悟
1、尾部的标识符的先后顺序无影响如: /gy等同于/yg
2、其实计算机很多搜索也是通过正则匹配的,比如我们搜索自己电脑上的硬盘文件时使用的通配符*
3、正则的匹配要注意需要有模块思想
4、如若要匹配特殊字符$、(、)、()、.、*、^、[、]、[]、?、+、{、}、{}等需要前面加上转义字符\特殊标注
5、在子表达式中需要使用\符号匹配,不能为空或者为/,正确示例如 /data(\w+).dat/g【全局匹配dataxxx…dat】
6、若没有()、[]等符号划分模块,量词描述则描述的是其前一位匹配元素【如同if …else一般】
7、+描述的是至少一次;*描述的是最少0次;?描述的是0/1次
8、中文匹配要不显式匹配【太沙雕】,要不就是通过unicode码值范围来匹配 在线unicode码值转化
9、非打印字符匹配【匹配字符串中的那些转义字符如: 回车符\r、换行符\n等】
10、^字符在方括号表达式中使用,此时它表示不接受该字符集合。
11、^字符和美元字符分别表示匹配有效字段的开头结尾
12、当同时使用^字符和美元字符时,则表示精准匹配(字符串与正则匹配完全一样)
13、预查询。注意若存在这样需求:提取数字前面的昵称,但是不需要数字中带有1-3前面的昵称,利用正向肯定预查预查询是个不错的选择】

说白了就是:匹配的时候要别人,那值得时候就嫌弃别人

// 提取数字前面的昵称,但是不需要数字中带有1-3前面的昵称
// 利用正向肯定预查【因为预查子串在后,若是预查子串在前则利用反向肯定预查?<=】
const str = 'chujiu9-xiaoying8-xiaomai7-luanlai1-ali6-yaozou2-jinyu0'
const nickNames = str.match(/[a-zA-F]+(?=[04-9])/g)
console.log(nickNames) // ["chujiu", "xiaoying", "xiaomai", "ali", "jinyu"]

14、关于{}中的量词可以匹配个数的区域范围来形容,当参数为{n}时,为次数绝对限制【多的/少的个数都检测不到,只能检测到刚刚好的个数】匹配;当参数为{n,}时,为次数至少n次匹配,例如0{1,}等价于0+,0{0,}等价于0*;
当参数为{n, m}时,且参数必须满足n<=m,次数范围则是n<= count <=m。
15、反向引用。对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式【注意:是按照表达式来划分缓冲区的】。每个缓冲区都可以使用 \n 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。

说白了就是:借用前面前辈(捕获组)匹配规则,来进行再一次的匹配

   const str = 'Is is const IS of of ha up up IS'
    // 一号缓冲区[a-z]+;
    const reg_add = /\b([a-z]+) \1\b/ig
    // 当正则匹配匹配时,会先匹配所有括号内子表达式
    // 匹配时,都会先与自身缓冲区内容作对,若找不到相同元素则会储存到缓冲区内
    // 当各个子表达式的缓冲区内容确定之后,则会开始匹配/\b([a-z]+) \1\b/
    const targetString = str.match(reg_add)
    console.log(targetString) // ["Is is", "of of", "up up"]

16、负负得正,本身为特殊字符的再进行\转义,就变成了原义字符如\(就表示原义字符(
17、(x|y)haha匹配xhaha或yhaha
18、/b和/B,/d和/D,/w和/W是相反
19、/num匹配num号缓冲区内的存在的可能元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值