吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2904|回复: 20
收起左侧

[其他转载] 正则表达式(二)

  [复制链接]
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是匹配所有的字母和数字[a-zA-Z0-9_]\W是匹配所有的非字母数字,那么\b就是交界处
1.PNG
如图所示,空白符和开头是 \W ,字母是 \w ,紫色线就是 \b
\B是非单词交界(就是字母间的间隙,空格不算!!!)
2.PNG
如图,单词间的间隙画上的紫色线就是 \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,但是很明显有个致命的问题,就是开头的‘^’符号也被计入了,自己想想要怎么做呢?
3.PNG
其实解决方法就是找差别,后面的逗号夹在两个数字之间,前面的逗号夹在开始符号和首数字间,于是改进:/(?=\B(\d{3})+$)/gm
4.PNG
当然这里分割符都是回车,其他情况就靠大家自己去想了
这里给大家再做一个分隔符是空格的,其他大家自己灵活变通!
5.PNG
2.表单验证之一------密码验证
重磅重磅!!!!!最最最常用到的地方
Tip1   6-12位,不允许特殊字符
var reg = /^[0-9A-Za-z]{6,12}$/;
Tip2   同时包含两种字符
var reg = /(?=.*[0-9])(?=.*[a-z])/;
大致意思就是跟着的字符必须有数字or字符
由于不止小写和数字,还有大写字母,通过分类讨论和整合,得到最终答案是:
var reg = /((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))^[0-9A-Za-z]{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
还剩一点内容,今天累了。。。
附件的排版比较好一点。。。。

正则表达式(二).docx

63.43 KB, 下载次数: 63, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 3吾爱币 +3 热心值 +1 收起 理由
萨克 + 1 用心讨论,共获提升!
BlovedCQ + 1 支持楼主持续更新
wapj2900958 + 1 + 1 期待三

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

时光书窝 发表于 2020-2-26 16:19
前排支持一下,
 楼主| yuqiaobin 发表于 2020-2-26 16:22
蓝奏云:https://www.lanzouj.com/b00z9h48j  密码:8r3y
吾爱币 +1 CB
chenqichun 发表于 2020-2-26 16:24
lianyi880928 发表于 2020-2-26 16:25
正则表达式感觉好难
hshcompass 发表于 2020-2-26 16:27
吃瓜群众路过,举手点个赞
greatzk 发表于 2020-2-26 16:27
前来观摩一下
lovelily0626 发表于 2020-2-26 16:28
好厉害,学习了
onoffon 发表于 2020-2-26 16:33
感谢,辛苦,这个整理容易理解。学了几次都没学下去,希望这次能懂多一些。
zg2600 发表于 2020-2-26 16:52
有没有讲的不错的视频教程
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表