目前尚不清楚正则表达式

时间:2015-06-09 22:29:45

标签: javascript regex

为什么这是一个正则表达式会得到以下结果:" abcdcdcd"?

'abcdcdcdlorem'.match(/(ab|cd)+|ef/); // ["abcdcdcd", "cd"]

或者从左到右处理,直到找到匹配为止。当在左右找到匹配时,忽略了替代,即使有可能实现最好的"匹配。

2 个答案:

答案 0 :(得分:2)

在交替中,左侧的表达式具有优先权。这是初学者认为a|ab|abc|abcd将匹配abcd的常见陷阱。

它不会,它只匹配a,因为它满足交替 同 优先考虑左边的项目。

但是,如果替换在分组构造内,则引擎会考虑围绕该组的构造的量化。

即使如此,在组内,量化为1次或更多次,
(a|ab|abc|abcd)+仍然只会与a中的abcd匹配,然后停止。

所以,不要陷入那个陷阱!!

答案 1 :(得分:1)

正则表达式中的+指示它继续查找ab|cd的实例,因此它会发现ab一次,cd三次。