【发布时间】:2019-12-02 11:32:42
【问题描述】:
为什么"hello".match(/^(.*?)?/)[0] 的计算结果为"h" 而不是""?
换句话说,为什么在一个懒惰的表达式 (.*?) 后面加上一个零或一的量词 ? 会有点贪心?
【问题讨论】:
-
有趣的观察。但我不确定答案是否会非常令人兴奋。我的猜测是
?量词会产生很多零长度匹配,这非常没用 - 即使/^.?/仅匹配"h"我不确定我是否会找到匹配""的值,即使它是一个有效的结果。 -
@VLAZ:我完全找到了它的价值......事实上,它实际上导致了我的代码中的一个错误,因为它在我没想到的时候从字符串的其余部分中剥离了一个字符它到:(
-
更令人困惑 -
"hello".match(/^(.*?){0,2}/)[0] # => "he". -
@VLAZ:为什么要跳过它?取出第二个
?已经导致零长度匹配。把?放回去根本不需要跳过那场比赛。我完全期待它匹配。 -
regex101 表明这仅适用于 JavaScript:regex101.com/r/3oYGgl/1。其他风味符合您的预期并返回零长度匹配。
标签: javascript regex quantifiers