为什么这是一个正则表达式会得到以下结果:" abcdcdcd"?
'abcdcdcdlorem'.match(/(ab|cd)+|ef/); // ["abcdcdcd", "cd"]
或者从左到右处理,直到找到匹配为止。当在左右找到匹配时,忽略了替代,即使有可能实现最好的"匹配。
答案 0 :(得分:2)
在交替中,左侧的表达式具有优先权。这是初学者认为a|ab|abc|abcd
将匹配abcd
的常见陷阱。
它不会,它只匹配a
,因为它满足交替
同
优先考虑左边的项目。
但是,如果替换在分组构造内,则引擎会考虑围绕该组的构造的量化。
即使如此,在组内,量化为1次或更多次,
此(a|ab|abc|abcd)+
仍然只会与a
中的abcd
匹配,然后停止。
所以,不要陷入那个陷阱!!
答案 1 :(得分:1)
正则表达式中的+
指示它继续查找ab|cd
的实例,因此它会发现ab
一次,cd
三次。