2013-08-28 4 views
1

JQuery 자동 완성을위한 배열의 정규 표현식 검색이 올바르게 작동하지 않습니다.자바 스크립트에서 정규 표현식 검색

다음
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) 

사실 반환하지 않습니다

나는 배열을 가지고있다. 왜?

답변

1

일반 표현식 개체를 한 검색에서 다음 검색 상태로 남겨두고 일을 엉망으로 만들 수 있으므로 정규식에서 g 플래그를 제거해야합니다. 정규 표현식을 특정 용도로 사용할 이유가 없어야합니다.

그런 다음 도움이 필요하면 해당 배열에서 검색 결과가 정확히 무엇인지를 보여줘야합니다. 당신이 경기를 받기 시작 할 때 당신은 모든 경기를 축적하려는 경우가 for의 모든 반복에 다시 초기화되지 않도록

, 당신은 for 루프 이전에 arr 변수의 초기화를 이동해야합니다 고리.

+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' ** ** target **이 바뀌더라도 JavaScript가 그런 식으로 동작한다고 믿는 데 어려움을 겪었을 것입니다. –

0

request.term의 내용을 기록하거나 디버깅하는 경우 훨씬 명확 해집니다 (그리고 우리 :!)).

또한 for 전에 var arr=new Array();으로 이동해야한다고 생각합니다. var index=0;은 제거 할 수 있습니다.

+0

괜찮 았어 request.term 디버깅, jquery, gerp 같은이 작업을 수행하는 다른 방법이 있지만 왜 루프에 대한 내부 문을 true 반환하지 않았다 이해하지 못했습니다. – bhawin