yuqiaobin 发表于 2020-2-26 16:16

正则表达式(二)

本帖最后由 yuqiaobin 于 2020-2-26 16:19 编辑

匹配位置(锚点)

^$\b\B(?=p)(?!p)
六个锚字符,下面一一介绍
一. ^号
开始符,即匹配字符串的开头
"(T|t)he" => The car is parked in the garage.
"^(T|t)he" => The car is parked in the garage.
上面这个例子可以看到这个^的作用
二. $号
结束符,即匹配字符串的末尾
"(at\.)" => The fat cat. sat. on the mat."(at\.)$" => The fat cat. sat. on the mat.上面这个例子可以看到这个$的作用
三. \b和\B
\b是单词边界(是位于\w和\W)
回忆一下 \w是匹配所有的字母和数字,\W是匹配所有的非字母数字,那么\b就是交界处

如图所示,空白符和开头是 \W ,字母是 \w ,紫色线就是 \b
\B是非单词交界(就是字母间的间隙,空格不算!!!)

如图,单词间的间隙画上的紫色线就是 \B
四. (?=p)和(?!p)系列
先行断言和后发断言都属于非捕获簇(不捕获文本 ,也不针对组合计进行计数)。 先行断言用于判断所匹配的格式是否在另一个确定的格式之前,匹配结果不包含该确定格式(仅作为约束)
带着仅作为约束这句话,我们看看以下内容
(?=p)给的约束是p字符前面的位置
比如(?=l),表示'l'字符前面的位置
var result = "hello".replace(/(?=l)/g, '#');
console.log(result);
// => "he#l#lo"

而(?!p)就是(?=p)的反面意思,也即不是p前面的位置
var result = "hello".replace(/(?!l)/g, '#');
console.log(result);
// => "#h#ell#o#"

这个系列的操作还有如下两个
(?<=p)   (?<!p)
(?<=p)的约束是对p的后面生效
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
分析上面这个例子,(?<=(T|t)he\s)说的是约束到(T|t)he\s后面的位置,(T|t)he\s是啥,就是the+空格,或者The+空格,相当于例子中约束位置到fat前面和mat前面。
(?<!p)意思相反,不多赘述
五. 案例
1. 怎么做千位分隔符
一开始我的想法是每隔三位找到间隙,/(?=(\d{3})+$)/gm,但是很明显有个致命的问题,就是开头的‘^’符号也被计入了,自己想想要怎么做呢?

其实解决方法就是找差别,后面的逗号夹在两个数字之间,前面的逗号夹在开始符号和首数字间,于是改进:/(?=\B(\d{3})+$)/gm

当然这里分割符都是回车,其他情况就靠大家自己去想了
这里给大家再做一个分隔符是空格的,其他大家自己灵活变通!

2.表单验证之一------密码验证
重磅重磅!!!!!最最最常用到的地方
Tip1   6-12位,不允许特殊字符
var reg = /^{6,12}$/;
Tip2   同时包含两种字符
var reg = /(?=.*)(?=.*)/;
大致意思就是跟着的字符必须有数字or字符
由于不止小写和数字,还有大写字母,通过分类讨论和整合,得到最终答案是:
var reg = /((?=.*)(?=.*)|(?=.*)(?=.*)|(?=.*)(?=.*))^{6,12}$/;
至此,基础的语法你已经懂了,试着自己写写邮箱的验证?
六. 模式修正符

标志描述
i忽略大小写。
g全局搜索。
m多行修饰符:锚点元字符 ^ $ 工作范围在每行的起始。

例子 /.*?/g 可使用多个
常用的就这三个,不够用百度就行了
还有,有时候不要因为思维禁锢在正则表达式中,忘记使用一些更简单的方法和系统自带的函数
测试平台:https://regex101.com/r/dmRygT/1
参考文章:
https://www.zhihu.com/tardis/sogou/art/30750456
https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md#1-%E5%9F%BA%E6%9C%AC%E5%8C%B9%E9%85%8D
还剩一点内容,今天累了。。。
附件的排版比较好一点。。。。

时光书窝 发表于 2020-2-26 16:19

前排支持一下,

yuqiaobin 发表于 2020-2-26 16:22

蓝奏云:https://www.lanzouj.com/b00z9h48j密码:8r3y
吾爱币 +1 CB{:301_998:}

chenqichun 发表于 2020-2-26 16:24

赞赞赞赞赞赞赞赞

lianyi880928 发表于 2020-2-26 16:25

正则表达式感觉好难

hshcompass 发表于 2020-2-26 16:27

吃瓜群众路过,举手点个赞{:1_921:}。

greatzk 发表于 2020-2-26 16:27

前来观摩一下

lovelily0626 发表于 2020-2-26 16:28

好厉害,学习了

onoffon 发表于 2020-2-26 16:33

感谢,辛苦,这个整理容易理解。学了几次都没学下去,希望这次能懂多一些。

zg2600 发表于 2020-2-26 16:52

有没有讲的不错的视频教程
页: [1] 2 3
查看完整版本: 正则表达式(二)