开启掘金成长之旅!这是我参与「掘金日新计划 · 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次
这些限定符都能够有贪婪特性,我们就可以加上问号限制它们的贪婪。
结语
正则表达式的两大特性到这里就结束了,总得来说也是有好有坏,主要还是看自己的需求。