正则表达式学习笔记

最近在看一本名为《JavaScript权威指南》(第六版) 的书,里面有一个章节讲到了正则表达式,第一遍看的时候单纯的是为了应用,也没太仔细看,回头又看了一遍,觉得总结的很到位,特此做个笔记,以备不时之需。

1.正则表达式的定义
var g = new Regexp()
var g = /…/.

基本上高级语言都支持正则匹配的,定义也无非这两种吧 ,就好比java语言中你定义一个数组 可以 new 一个 也可以 用
var a = [] 或者C里面的 int a[] = {1,2,3} 大同小异。

2.直接量字符
书上定义为直接量字符,我个人觉得比较抽象,也可能是翻译过来造成 的,可能老外的意思就是没有其他特殊含义的字符
懒得打字了 ,直接截个图,注意特殊字符要加反斜杠才能匹配到

正则表达式学习笔记_第1张图片

3.字符类
跟直接量字符相比,这个字符类就比较厉害了,也是使用最广泛的地方,包括后面的匹配规则都会用到这里,所以一定记住,怎样算记住,就是要背下来,下面就是我不看书自己敲出来的,也算对自己学习的一个检验

字符 功能
[…] 匹配方框内的任意字符
[^…] 方框外的任意字符
. 任意字符,除了换行符/n 和 其他unicode 终止符,0x0000
/s 任何的unicode空白符,空格啥的
/S 任何非unicode空白符 和 /s相反
/w 任意ASCII字符组成的单词 等价于[a-z0-9A-Z]
/W 任意非ASCII字符组成的单词 等价于[^a-z0-9A-Z]
/d 任意ASCII数字 等价于[0-9]
/D 任意非ASCII数字 等价于[^0-9]
[\b] 退格符,这玩意儿很少用

我已经背下来了,哈哈,下面厉害的功能闪亮登场了,就是正则的精髓,匹配规则

4.重复
{n,m} 匹配n-m次 例如{2,3} 出现2到3次的
{n} 匹配出现n次
{n,} 大于等于n次
? 匹配前一项0次或1次 等价于{0,1}

  • 匹配前一项大于等于1次 等价于 {1,}
  • 匹配前一项0次或多次 等价于 {0,}

非贪婪模式
加个?
5.选择
/ab|cd|ef/ 一个竖线搞定
6.分组
(…)
(/s+)
7.引用
\n
()圆括号内是子表达式,如果不想重复写子表达式,可以使用正则的引用功能,看下面例子就可以理解了
/(dd)+(ee)+(ff)+/
上面有个三个自表达式 分别是(dd) (ee) (ff)
如果想引用第一个 就可以在后面这样写 \1 反斜杠1
如果想引用第N个 \N

来个图吧
正则表达式学习笔记_第2张图片

女朋友来了,中午做了个饭,忙了一下啊,回来了 接着写

8.指定位置

正向肯定 ?=p
比如 fuck(?=you|yousister) 可以匹配 fuckyou里的fuck 但不能匹配fuckme里的fuck ,也就是说正向的匹配带p的内容,但是不含p,这样好理解了吧!
正向否定 ?!p
理解了正向肯定,正向否定就是相反的,还是拿上面的 说事儿,正向否定 可以匹配 fuckme里的fuck,但是不能匹配fuckyou里的fuck

理解了正向的,负向的就是匹配前面的,个人觉得 说正向,负向,不如说前向和后向,也就是说 使用正负不如使用前后更贴切
负向肯定 ?<=p
例如:(?<=oppo|apple|xiaomi|huawei)phone 可以匹配 oppophone 里的phone但是不能匹配jinliphone
负向否定 ?< ! p
(?<=oppo|apple|xiaomi|huawei)phone 可以匹配 jinliphone 里的phone但是不能匹配xiaomiphone

9.修饰符
i 忽略大小写
g 全局
m 多行匹配

10.模式匹配方法

new regexp(/\s/,“i”)
match 返回匹配结果数组,包括子表达式的
replace (/\s/,"")替换
test

好了,逼逼完了,下面符一张图,备忘

正则表达式学习笔记_第3张图片
正则表达式学习笔记_第4张图片
正则表达式学习笔记_第5张图片
正则表达式学习笔记_第6张图片

全剧终~~~假的

20180920 补充踩坑说明

2.(?<=)正向后查找
废话不多说,看个例子。
文本 d23.90 d12.32 d12.34 33.33
正则表达式 (?<=d)[0-9.]+
匹配结果 d23.90 d12.32 d12.34 33.33
可以看到$没有出现在匹配结果里,也不会匹配到33.33。

注意:向前查找模式的长度是可变的,它们可以包含.、、+之类的元字符;而向后查找模式只能是固定长度,不能包含.、、+之类的元字符。
这句话的意思是值:(?<=t+)这种就是非法的!,而(?=t+)是合法的。
刚开始我以为是指子表达式后不能跟* +这种元字符,后来测试了一下发现是这个意思。

你可能感兴趣的:(正则表达式)