gpt4 book ai didi

JavaScript 正则表达式 : why is alternation not ordered?

转载 作者:行者123 更新时间:2023-12-02 20:55:56 27 4
gpt4 key购买 nike

鉴于此代码:

const regex = /graph|photograph/;
'A photograph'.match(regex);
// Output: [ 'photograph', index: 2, input: 'A photograph', groups: undefined ]

为什么引擎找不到graph第一的?在查看了类似的SO问题和ECMAScript docs之后,我可以看到

The | regular expression operator separates two alternatives. The pattern first tries to match the left Alternative (followed by the sequel of the regular expression); if it fails, it tries to match the right Disjunction (followed by the sequel of the regular expression).

现在,上面的引用涵盖了案例 /photo|photograph/其中替代方案具有共同的开头,但它们具有共同的结尾的情况似乎受不同的规则管辖。

我对得到的结果感到满意,因为在我的用例中,我更喜欢获得最长的匹配,而不是最早的匹配,但我想知道为什么会发生这种情况,所以我可以确定这不是只是一个巧合, future 必然会改变。

最佳答案

替代的 graph 与从第三个字符开始的位置不匹配,但替代的 photograph 可以。引擎从左到右处理字符串。

当替代项从字符串中的共同起点匹配时,您在问题中引用的顺序适用。否则,在处理“haystack”字符串时,将考虑所有替代方案。如果有一个从特定字符开始的匹配,那么正则表达式的其余部分将继续执行(当然也可能稍后回溯)。

当源中同一字符存在多个匹配时,引擎是否更喜欢一组替代项中的较长匹配,我不能直接说出来。我猜它会首先尝试更长的字符串,乐观地消耗更多的字符串,因为它总是可以回溯。但是,我不知道这是实际指定的行为,只是考虑阅读规范中的正则表达式语义就让我头疼。

关于JavaScript 正则表达式 : why is alternation not ordered?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61485534/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com