2013-08-28 96 views
1

在數組中搜索正則表達式以查找JQuery自動完成功能無法正常工作。在JavaScript中搜索正則表達式

我有一個數組:

var names = [ "Jorn Zaefferer", "Scott Gonzalez", "John Resig" ]; 

這裏的JQuery的自動完成功能:

$("#developer").autocomplete({ 
    source: function(request, response) { 
    var matcher = new RegExp('^'+request.term,'g'); 
    var arr=new Array(); 
      for(var i=0;i<names.length;i++) 
    { 
     var index=0; 

     if(matcher.test(names[i])===true)    //not returning true 
     { 
      console.log("it is true"); 
      arr.push(names[i]); 
     } 
     else 
     { 
      console.log("not done"); 
     } 
    } 
    response(arr); 
    } 
}); 

條件語句:

if(matcher.test(names[i])===true) 

的代碼不返回true。爲什麼?

回答

1

您需要刪除正則表達式中的g標誌,因爲這可能會將正則表達式對象從一次搜索狀態保留到下一次搜索狀態,從而導致混亂。在你使用正則表達式時應該沒有理由。

然後,爲了獲得進一步的幫助,您可能需要向我們展示您在該數組中搜索的內容永遠不會返回true。

當你開始得到的比賽,如果你想積累所有的比賽,你將需要for循環之前的arr變量的初始化移動,因此不會在for的每一次迭代重新初始化循環。

+0

選項'g'不會留下任何垃圾或狀態。實際上,它對'test'沒有影響。 –

+0

@MarioRossi - 對於'.test()'的[MDN doc](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test)陳述如下:'As使用exec(或與它結合),在同一個全局正則表達式實例上多次調用的測試將超過前一次匹配。'如果這些代碼打算查找多個匹配,那麼會導致OP代碼出現問題。 – jfriend00

+0

即使當'test'的**目標**發生變化時,如果您沒有說出來,我也會很難相信JavaScript的行爲。 –

0

如果您記錄或以其他方式調試request.term的內容,那麼您(和我們!:-))會更加清晰。

此外,我認爲你需要在for之前移動var arr=new Array();var index=0;可以刪除。

+0

我已經調試了request.term這很好,還有其他的方式來做這個任務像jquery,gerp但我不明白爲什麼if語句裏面for循環沒有返回true – bhawin