正则表达式&& ||难题

时间:2015-12-28 00:45:06

标签: javascript expression

如果有人能解释为什么会这样,我将不胜感激。附加的图像显示了我在结合课程后尝试的Javascript正则表达式的控制台镜头。我希望在使用OR ||时能得到所有真正的布尔值至少是运营商。

使用||进行正则表达式操作者:

regular expression with || operator

正则表达式&&操作者:

regular expression with && operator

3 个答案:

答案 0 :(得分:5)

您好像假设&&||合作"合并"正则表达式,但布尔运算符根本不像JavaScript一样工作。 From MDN:

  

逻辑运算符

     

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

如果ab是正则表达式对象,则它们都是" truthy。"对于任何两个真值,a || b评估为aa && 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;
&#13;
&#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