Javascript 正则表达式&&|难题

Javascript 正则表达式&&|难题,javascript,expression,Javascript,Expression,如果有人能解释这是为什么,我将不胜感激。所附的图片显示了一个Javascript正则表达式的控制台快照,我在学习完本课程后尝试了该正则表达式。至少在使用OR | |运算符时,我希望得到所有真正的布尔值 带| |运算符的正则表达式: 带&&运算符的正则表达式: 您似乎假设&&和| |可以“组合”正则表达式,但布尔运算符的工作方式与JavaScript中的不同 逻辑运算符 逻辑运算符通常与布尔值一起使用。如果是,则返回一个布尔值。但是,&&和|运算符实际上返回指定操作数之一的值,因此如果这些运算符

如果有人能解释这是为什么,我将不胜感激。所附的图片显示了一个Javascript正则表达式的控制台快照,我在学习完本课程后尝试了该正则表达式。至少在使用OR | |运算符时,我希望得到所有真正的布尔值

带| |运算符的正则表达式:

带&&运算符的正则表达式:


您似乎假设
&&
| |
可以“组合”正则表达式,但布尔运算符的工作方式与JavaScript中的不同

逻辑运算符 逻辑运算符通常与
布尔值一起使用。如果是,则返回一个布尔值。但是,
&&
|
运算符实际上返回指定操作数之一的值,因此如果这些运算符与非布尔值一起使用,它们可能返回非布尔值


如果
a
b
是regex对象,那么它们都是“truthy”。对于任意两个truthy值,
a | | b
计算为
a
a和&b
计算为
b

a RegExp将始终计算为
true
,因此根据:

document.write(/Mou/)| |(/str/);
文件。写(“
”);
写作((/Mou/)&(/str/)相当容易出错:

&&和| |称为“短路”运算符,它们根据第一个操作数的值返回第二个操作数


请尽可能发布普通代码,因为阅读该屏幕截图几乎是不可能的。对此我真的很抱歉。我不知道这个网站会把他们缩得这么厉害!!这是我第二次在这里发帖,也是我第一次贴图片。没问题!只是提供一些建议,让更多的人可以帮助你解决问题。纯文本真的很好,因为人们可以从你的示例中复制粘贴代码来测试东西,而且它还可以搜索。这就是我需要知道的!!非常感谢!!所以,这对regex来说只是一种“礼节”,对吧??使用[或]| |运算符,第一个为真;使用[和]&&运算符,第二个为真;正确吗?不,关键是没有任何特定于正则表达式的布尔运算符行为。是的,我确实假设| |&&操作数在正则表达式中“正常”工作;现在我知道他们通常不会这么做。非常感谢!!这是一个非常糟糕的JS引用。这是我找到的最快的源代码。我自己也不是JS的粉丝,但我确实记得那些是短路。除了Oracle文档本身之外,您还有什么建议?MDN是一个很好的参考资料,但这似乎不是javascript问题,而是正则表达式问题。操作员短路的事实与此无关。答案引用的句子(“它们根据第一个操作数的值返回第二个操作数”)完全不正确。我会推荐or(而不是Oracle——不要把Java和JavaScript混为一谈!)。这真是一个“口是心非的时刻”,因为我成功地看到了后面的评论!!似乎链接的文章在一些读者之间引起了某种形式的争论,这真的很有趣…我现在可以看出这篇文章是不正确的…尽管如此,很容易出错!!!这正是我需要知道的!!非常感谢!!我正在学习,每堂课结束后,我都会尝试用代码进行测试和实验,看看我是否做对了,并实际看到它在工作。我的想法是看看我是否能找到两个不同的字符串。我的下一步是,如果我能设法找到它所在的var字符串。这真是超级有趣;也许我很奇怪!!再次感谢!!很高兴知道您正在发现编程的乐趣。JS有很多令人困惑的方面,所以如果你一开始觉得有些事情很奇怪,不要担心。是的!!!它变成了我的游戏场,有点……我已经试着在我自己的学习C++,大约8年前,设法达到中间水平的开始…不知道它是幸运的,或者,不幸的是,我不记得太多,因为一些导师告诉我忘记它,当我学习我目前正在学习的语言时(html、css、javascript、jquery和ajax、ruby和rails)有些导师告诉我不要忘记它,相反,我认为从C++这样的语言开始有帮助,它有更严格的结构,因为在引擎盖下,JavaScript与类型、对象等做了很多相同的事情……只是不要假设你知道JS,因为你知道C++,因为这个问题突出了一些看起来相似的东西。r实际上工作方式不同。哎呀,忘了这么做了!!好吧,这是另一个进退两难的问题,因为我不太确定这两个中的哪一个回答了我的问题。马特·鲍尔的那一个非常有用,非常感谢所有的解释,让我意识到我假设这些操作数在正则表达式中“正常”工作。勒夫的那一个只是就我试图实现的目标而言,“一针见血”。我认为从表面上看,正确的答案是勒拉夫,但马特·鲍尔成功地理解了为什么输出是这样。非常感谢这两位;非常感谢。
(/Mou/) || (/str/)  //=> /Mou/
(/Mou/) && (/str/)  //=> /str/