2013-04-03 67 views
0

我正在独立接口上工作。regexp.test()返回布尔值,但不在'if'语句上 - 总是计算为

我有几个文本框,并且都有名称和ID。

如果我运行此代码:

var re = /someregexp/g; 
var k ="sometext"; 

textBoxOne.setText(re.test(k)); //textBoxOne was selected first 

正确的结果是“真”或“假”显示。 要求'typeof(re.test(k))'正确返回布尔值。 但是这个代码:

if (re.test(k)) { 
    textBoxTwo.setText("matched."); 
} else { 
    textBoxTwo.setText("NOT matched."); 
} 

始终进入 '其他' 分支。如果(re.test(k)== true)呈现相同的结果。

对我来说看起来像一个bug,其他人也发现了这个?

+0

根据我对David Tew对帖子的评论,您是否已经在脚本的早些时候调用了're.test(k)'?因为下一次调用将超过前一次匹配(因此可能找不到您所期望的匹配)。 – AdamL 2013-04-04 23:51:02

回答

0

编辑:AdamL在他的评论中指出(感谢Adam),这比我想象的更多。我将下面的原始代码留作参考。下面

的myFunction2()遵循“匹配”的分支,你会期待一个正常工作的正则表达式(也许这可以用来解决的bug):

function myFunction2() { 
    var k ="sometext"; 

    Logger.log( /ome/g.test(k) ); 
    if (/ome/g.test(k) ) { 
    Logger.log("matched."); 
    } else { 
    Logger.log("NOT matched."); 
    } 
} 

相反,当你观察,下面的myFunction()意外地跟随到“不匹配”分支。

function myFunction() { 
    var re = /ome/g; 
    var k ="sometext"; 

    Logger.log(re.test(k)); 

    if (re.test(k)) { 
    Logger.log("matched."); 
    } else { 
    Logger.log("NOT matched."); 
    } 
} 
+0

我不知道这是否适用于OP的职位David,但我认为它适用于您的myFunction():https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/测试“...在相同的全局正则表达式实例上调用多次的测试将超越前一场比赛”。因此,注释Logger.log行实际上会使if()正确评估。 – AdamL 2013-04-04 23:48:53