关于正则匹配机制的问题
来源:4-5 email邮箱
亚麻桑
2021-07-25 17:53:19
老师,看完本节课,有一些地方不太理解……
假设有如下正则匹配:
var str = ".cn.com.aaa.bbbb";
var pattern = /^(\.[a-z]+)*\.([a-z]{1,4})$/;
console.log(str.match(pattern));
结果是:
有两个问题:
1、为什么捕获到【.aaa】,而不是【.cn】、【.com】、【.aaa】。因为它是最后一个匹配到的吗?
2、按照我的理解,贪婪模式下,前面的【(\.[a-z]+)*】已经能够匹配整个字符串【.cn.com.aaa.bbbb】,但是正则后面还有【\.】,显示不能这么匹配。正确的做法,只能匹配到【.cn.com.aaa】。正则采用了什么机制规避这种过度贪婪?
1回答
同学你好,解答如下:
1、从结果上分析,是因为.aaa处于最后面,所以分组中,匹配到了它。
2、正则在做贪婪匹配时,要保证“更多的匹配”,还要保证满足正则的规则。比如这里,(\.[a-z]+)*虽然能匹配到.cn.com.aaa.bbbb,但是如果这样匹配,就没法满足后面的规则 \.([a-z]{1,4}) 了。所以它就不会这样匹配,而是寻找下一个可能的匹配位置,继续判断。
正则的内容,会简单应用即可。实际开发中,很少会应用特别难的正则。如果对底层原理感兴趣,可以工作后,花时间研究一下。
祝学习愉快!
相似问题