基础 | 正则表达式(JS)-入门篇2

2022-06-29 15:25:31 浏览数 (1)

继续讲下一般人(这里的一般人指的是一般不写正则的人)不经常用的功能:

1、忽略优先量词

包括:*?、 ?、??、{num, num}? 。这几类和后面没有加?的量词的区别就是:前者会匹配尽可能少的内容,只要满足下限,匹配就能成功;而后者反之(简单点说就是非吃货和吃货的区别)。

2、非捕获型括号(?:…) 这个是什么意思呢?意思是只分组不捕获。 好处: 1>避免了不必要的捕获操作,提高了匹配效率。 2>根据情况选择合适的括号能够叫逻辑更清晰,读者能清楚理解需要捕获的内容,而不用挨个数括号算作者到底想捕谁。 坏处:写法看着不够美观,增加了阅读难度,这个难度因人而异。

3、反向引用 直接上代码(匹配html标签),顺便复习下刚才讲的非捕获。

4、环视(lookaround) 什么叫环视呢?这个解释起来比较麻烦(TC:麻烦到只可意会不能言表,靠,尼玛坑爹呢!好了,不开玩笑了),我们举个例子讲。 例如:1234567890,我想从右到左,每3个加一个逗号,变为1,234,567,890。正则表达式怎么写? 逗号应该加在“左边有数字,右边数字的个数正好是3的倍数的位置”,但是一般正则表达式都是从左向右工作的,这时就要用到“环视”了。 环视结构不匹配任何字符,只匹配文本中的特定位置,下面是四种类型的环视:

类型

正则写法

匹配成功的条件

js支持程度

肯定逆序环视

(?<=…)

子表达式能够匹配左侧文本

不支持

否定逆序环视

(?<!…)

子表达式不能匹配左侧文本

不支持

肯定顺序环视

(?=…)

子表达式能够匹配右侧文本

支持

否定顺序环视

(?!…)

子表达式不能匹配右侧文本

支持

有了环视,刚才我们的例子,就很好处理了,答案如下:

 替换逗号步骤我没写,只是把需要在后面加逗号的数字都匹配出来了。

5、元字符和字符组的一些小破事 1、元字符的规定在字符组内外是有差别。 例如[*]的*就不再是元字符了;而[-]的-还是元字符;^在[]就不是匹配开头了,而是取反的意思(这里就不一一列出了,主要是提个醒,大家用到时注意点。为什么不一一列出,你这个懒鬼!回答正确,加10分)。 2、在多数系统中,使用范围表示法而不是列出范围内的所有字符并不会影响执行速度(例如:[0-9]与[0123456789]是一样的。)相反,如果某些实现方法没有优化好的话,还会是范围表示法会快一些。

扫码下方二维码,

随时关注更多前端干货文章!

微信:IMWebTech

0 人点赞