关于javascript正则表达式的一个行为

关于javascript正则表达式的一个行为,javascript,Javascript,在Firefox上 "aaa".match(/a?/g) 产生 ["a", "a", "a", ""] 只是好奇为什么数组末尾有一个空字符串 就像重新引擎要检查每个字符一样,字符串只有3个字符,为什么要生成4个匹配项?空字符串是有效匹配项。它以前不匹配的唯一原因是?贪婪。因此匹配“a”是优先的,但是当引擎到达字符串的末尾时,它唯一能匹配的就是空字符串 引擎不计算要进行多少次匹配。在一个匹配之后,它只是从下一个字符开始计数。在第三个a之后,剩下的是空字符串: >>> "".m

在Firefox上

"aaa".match(/a?/g)
产生

["a", "a", "a", ""]
只是好奇为什么数组末尾有一个空字符串


就像重新引擎要检查每个字符一样,字符串只有3个字符,为什么要生成4个匹配项?

空字符串是有效匹配项。它以前不匹配的唯一原因是
贪婪。因此匹配
“a”
是优先的,但是当引擎到达字符串的末尾时,它唯一能匹配的就是空字符串

引擎不计算要进行多少次匹配。在一个匹配之后,它只是从下一个字符开始计数。在第三个
a
之后,剩下的是空字符串:

>>> "".match(/a?/g)
[""]

好的,引擎将进行4次尝试,a和“”。