JavaScript正则表达式:为什么不按顺序进行替换?

JavaScript正则表达式:为什么不按顺序进行替换?,javascript,regex,Javascript,Regex,鉴于此代码: const regex=/graph | photo/; “一张照片”。匹配(正则表达式); //输出:[“照片”,索引:2,输入:“照片”,组:未定义] 为什么引擎没有先找到图形?在看了类似的SO问题和 |正则表达式运算符将两个选项分开。该模式首先尝试匹配左边的备选方案(后面是正则表达式的续集);如果失败,它将尝试匹配正确的析取(后跟正则表达式的续集) 现在,上面的引文涵盖了备选方案共享一个共同开始的情况,但它们共享一个共同结束的情况似乎受到不同规则的约束 我对我得到的结果感到

鉴于此代码:

const regex=/graph | photo/;
“一张照片”。匹配(正则表达式);
//输出:[“照片”,索引:2,输入:“照片”,组:未定义]
为什么引擎没有先找到
图形
?在看了类似的SO问题和

|
正则表达式运算符将两个选项分开。该模式首先尝试匹配左边的备选方案(后面是正则表达式的续集);如果失败,它将尝试匹配正确的析取(后跟正则表达式的续集)

现在,上面的引文涵盖了备选方案共享一个共同开始的情况,但它们共享一个共同结束的情况似乎受到不同规则的约束


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

备选
图形
从第三个字符开始不匹配,但另一种选择是拍摄照片。引擎从左到右遍历字符串


当备选方案从字符串中的公共起点匹配时,您在问题中提到的顺序适用。

字符串从左到右解析。