2013-04-03 61 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