学习正则表达式

标签: 无 分类: 前端 创建时间:2020-04-25 02:34:20 更新时间:2023-10-20 11:23:27

正则表达式这一章节,其实不太好分类,因为他是一种工具,无论是javascrip还是php、java、C#等等,各种语言,都需要正则表达式,也都实现了相应的正则表达式的功能,所以具体的正则表达式属于什么分类,就不好说了。不用纠结,反正无论干什么,都离不开正则表达式,那就要学习。

1.分组捕获

需求:”ab0k012ab9x92ab88g002”,这个字符串中,分别将ab0k012,ab9x92和ab88g002捕获到一个分组里面,该如何做?
(1) 经过长时间的尝试,其实还是没有解决,尝试过一些领宽断言之类的东西

1
2
3
4
5
6
7
8
9
10
11
((?=ab).*)+

(?:((?=ab).*))+

(?:((?<=ab).*?))+

(?:(ab.*?)(?<=ab))+

ab.*?

(ab.*?)

都不能尽如人意。

(2) 最后通过增加特殊字符串的方式实现了,将ab统统换成^^ab,然后使用:(?:([^\^\^]))+ 正则表达式

1
2
3
^^ab0k012^^ab9x92^^ab88g002

(?:([^\\^\\^]))+

(3) 根据上面的想法,通过添加特殊字符串的形式实现了,如果把特殊字符串转换为ab,是不是也能实现匹配呢?

1
(?:([^ab]))+

上面的正则表达式可以匹配:ab0k012ab9x92ab88g00f2

但是不能正确匹配:ab0k012ab9x92ab88g00a2

(4) 最后终于搞出来了,正确的正则表达式为

1
(?<=ab).*?(?=(ab|$))

(5) 进一步,如果以ab开头

1
ab(?<=ab).*?(?=(ab|$))

(6) 以多种字符开头,以多种字符结尾的,其中是以ab开头或者是le开头,以ab结尾,或者是以le结尾,或者是字符串的结尾都可以

1
2
3
ab0k012ab9x92ab88g00a2le888sdfleooosd

(?:ab|le)(?<=ab|le).*?(?=(ab|le|$))

2.正向肯定预查

(?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。”(?=pattern)” 小括号中增加了 ?= 前缀,表示的是匹配此分组,但是此分组里的内容不需要被获取。举例:正则表达式 “Windows(?=95|98|NT|2000)” 可以匹配字符串 “Windows2000” 中的 “Windows”,但是不能匹配 “Windows3.1” 中的 Windowds。

3.(?:pattern)

4.常用表达式

(1) 匹配空行和固定开头字符串
匹配换行和空行,实现匹配下面这样的代码,一行之后有空行,然后第一个字符是数字

1
2
3
jljl

3

方法一:

1
\s+$\n\n[0-9]

方法二:

1
\n\n[0-9]

方法三:

1
\n\n[0-9].\[
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。