2011-03-08 4 views
0

텍스트 입력에서 값을 가져오고 배열의 항목을 부분적으로 또는 전체적으로 일치시켜야하는 작은 스크립트가 있습니다.정규식 : 부분 일치 또는 전체 일치

나는 정규식과 구문을 사용하는 순간에 어려움을 겪고 있으며 두뇌를 고를 수 있는지 궁금해했습니다.

for (var i=0; i < liveFilterData.length; i+=1) { 

    if (liveFilterData[i].match(liveFilter.val())) { 
     alert(); 
    } 
} 

는 I 현재 배열 항목 liveFilterData 일치하도록 liveFilter.val() 정규식 필요 [I]를 일치하는 항목에서이 있는지 H 또는 텍스트 상자 H 누군가 유형, 그것을 체크한다 배열 그들이 그 또는 그녀를 타이핑하면 머리, 머리말 또는 표제와 일치합니다.

죄송합니다. 정규식을 만드는 방법에 대해 웹에서 살펴 봤지만 해결할 수 없습니다.

답변

1

간단한 문자열 비교 트릭을 할 놈이야 :

for (var v, i = liveFilterData.length; i--;) { 
    if (liveFilterData[i].slice (0, (v = liveFilter.val().toLowerCase()).length) === v) { 
     alert(); 
    } 
} 

liveFilterData는 소문자 단어를 포함해야합니다.

0

나는이 질문을 완전히 이해하고 있는지 잘 모르겠다. liveFilter.val()은 정규식입니까, 아니면 배열의 모든 값과 비교하려고하는 문자열입니까? 난 당신이 텍스트 상자의 keypress, keydown 또는 keypress에 대한 이벤트를 가지고 있으며, 위에서 작성한 코드가이 이벤트의 콜백에서 실행된다고 생각합니다. 그렇다면 값을 적절한 정규식으로 변환 할 수있는 여러 가지 방법이 있습니다. "^"+liveFilter.val() 루프에서 정규 표현식을 사용하고 있으므로이 코드를 new RegExp으로 사전 컴파일해야 루프가 다음과 같이 표시됩니다.

//the i in the second param here is a flag indicating case insensitive 
//a hat '^' in regex means 'beginning of the input' 
regex = new RegExp("^"+liveFilter.val(), i); 
for (var i=0; i < liveFilterData.length; i+=1) { 
    // regex.test uses the precompiled regex, and determines if there is a match 
    if (regex.test(liveFilterData[i])) { 
     alert("matched " + i); 
    } 
} 

희망이 있습니다.