2011-03-23 5 views
1

배열을 반복하면서, keydown (사용자가 누른 키)가 배열의 단어와 일치하는지 확인합니다. ,이 같이 .. 일치하는 목록을 경고 :Reg 표현식 - 배열을 반복하고 jquery의 목록에서 첫 글자를 찾으십시오.

 $.each(keywords, function(i) { 
      var rSearchTerm = new RegExp('\\b' + searchTerm + '\\b','i'); 
      if (keywords[i].match(rSearchTerm)) { 
       keywordIndex = i; 
       alert(keywords[i]); 
      } 
     }); 

이 잘 작동하지만, 내가 대신 각 목록의 첫 번째 문자에 대한 정규식 체크를 어떻게해야합니까 .. 전체 단어를 확인? searchTerm 경우

+2

'keywords' 배열은 단어 나 전체 문자열을 포함합니까? 즉, 각 배열 요소의 첫 글자 나 배열 요소 내의 모든 단어의 첫 글자 만 검사 할 수 있습니까? – jensgram

답변

3

단일 문자와 단어 keywords 문자열의 배열 :

$.each(keywords, function(i) { 
    var rSearchTerm = new RegExp('\\b' + searchTerm + '\\w*\\b','i'); 
    if (keywords[i].match(rSearchTerm)) { 
     keywordIndex = i; 
     alert(keywords[i]); 
    } 
}); 

\wcharacter class shorthand이다. 정규식은 단어 경계 다음에 searchTerm 문자 다음에 none (단일 문자) 이상 (단어 시작) 단어 문자가옵니다. 마지막 단어 경계 (\b)는 생략 할 수 있습니다.


searchTerm은 단일 문자이며 keywords 단어의 배열 인 경우 : BTW

$.each(keywords, function(i) { 
    if (keywords[i].substring(0, 1) == searchTerm) { 
     keywordIndex = i; 
     alert(keywords[i]); 
    } 
}); 

: 당신은 (그리고해야합니까?)을 한 후 return false; 문을 추가 할 수 있습니다 alert(); 루프를 끊으려면 (첫 번째 발생 만 찾으려면).

+0

그것은 매우 빠르며 첫 번째 방법은 나를 위해 가장 잘 작동합니다 :) 추가 질문이 있지만 .. 단지 하나의 결과 만 반환하기를 원합니다 (그래서 루프에 return false를 포함 시켰습니다). 그러나 첫 번째 방법으로 공백을 건너 뛰는 것처럼 보입니다. Fx, 배열에 "tralala d"와 "d"가 있으면 "d"대신 "tralala d"를 찾습니다. keydown 문자로 시작하는 목록 만 찾을 수 있습니까? – donpedroper

+0

@Don Pedro 두 번째 해결 방법이 맞습니까? 또는 나는 틀린가? 'keywords' 예제와 다른'searchTerm' 글자를 반환하는 방법을 게시하고 싶을 수도 있습니다. – jensgram

+0

Hehe nope, sorry .. 두 번째 방법은 위의 예제 ("tralala d"와 "d")에서 모두 "d"만 선택하면됩니다. – donpedroper

관련 문제