正则表达式的两大特性

76 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情

正则表达式的两大特性

在我们正则表达式中有两种特性,一种是懒惰,另外一种是贪婪。好家伙七宗罪里面占了两样,下面就是介绍一下这两个特性都有什么用。

1.懒惰

这个上一篇文章有讲到过一点,在我们使用exec方法进行捕获时,他都会从头开始,不会记住上一次操作到什么地方。这就是他懒惰的特性。

对这个特性我们是有解决方案的,那就是在正则表达式的后面加上标识符g,让它变为全局。之后我们在使用多个exec方法捕获时,他就会记住你上个捕获方法的位置,下一个捕获方法就会从这个位置的后面开始有符合的捕获出来,没有的话返回值就为空。

2.贪婪

     var reg=/\d{1,4}/   //我要的是至少一次到至多4次
     var str='aa1234bb'
     console.log(reg.exec(str))

在上面这几串代码中,有时候仅仅只需要一次就足以,但是它会将所有符合的都捕获出来,在这里的话也就是四次。

对贪婪这个特性我们也是有解决方案的,那就是在正则表达式的后面,给他加上一个问号。如下

     var reg=/\d{1,4}?/   

在加上问号之后他就会转为一种非贪婪模式,这样子就会在我们碰到第一个符合的字符就会停下来,不会再往下继续操作了。

这种非贪婪模式对好多的限定符都有用,比如:

     *? //星号 任意次数
     +? //加号 1次到任意次数
     ?? //问号  0次到1次
     {n,}  //中括号 n次任意次数
     {n,m}  //中括号 n次到m次

这些限定符都能够有贪婪特性,我们就可以加上问号限制它们的贪婪。

结语

正则表达式的两大特性到这里就结束了,总得来说也是有好有坏,主要还是看自己的需求。