如果有人能解释为什么会这样,我将不胜感激。附加的图像显示了我在结合课程后尝试的Javascript正则表达式的控制台镜头。我希望在使用OR ||时能得到所有真正的布尔值至少是运营商。
使用||进行正则表达式操作者:
正则表达式&&操作者:
答案 0 :(得分:5)
您好像假设&&
和||
合作"合并"正则表达式,但布尔运算符根本不像JavaScript一样工作。 From MDN:
逻辑运算符
逻辑运算符通常与
Boolean
(逻辑)值一起使用。如果是,则返回布尔值。但是,&&
和||
运算符实际上返回其中一个指定操作数的值,因此如果这些运算符与非布尔值一起使用,则它们可能返回非布尔值。
如果a
和b
是正则表达式对象,则它们都是" truthy。"对于任何两个真值,a || b
评估为a
,a && b
评估为b
。
答案 1 :(得分:3)
RegExp将始终评估为true
,因此根据logical operator rules:
(/Mou/) || (/str/) //=> /Mou/
和
(/Mou/) && (/str/) //=> /str/
document.write( (/Mou/) || (/str/));
document.write('<br>');
document.write( (/Mou/) && (/str/) );
&#13;
如果您要测试的是&#34; Mou&#34; OR &#34; str&#34; 在一个字符串中然后您可以使用此RegExp使用管道符号来实现具有组(more info)的逻辑或行为:
/(Mou|str)/
// or dynamically constructed:
var a = "Mou";
var b = "str";
var regexp = new RegExp('('+a+'|'+b+')');
如果您要测试的是&#34; Mou&#34; AND &#34; str&#34; 然后你可以使用这个稍微复杂一点的构造,它使用积极的前瞻(more info):
/(?=.*Mou)(?=.*str)/
// or dynamically constructed:
var a = "Mou";
var b = "str";
var regexp = new RegExp('(?=.*'+a+')(?=.*'+b+')');
答案 2 :(得分:-3)
相当容易犯错:
&安培;&安培;和||被称为“短路”运算符,它们根据第一个值返回第二个操作数。
http://www.openjs.com/articles/syntax/short_circuit_operators.php