문제

현재 구현 Remy Sharp의 jQuery 태그 제안 플러그인 태그 시작시 일치 만 확인합니다. 예를 들어 "Photoshop"을 입력하면 "Adobe Photoshop"이라는 태그가 반환되지 않습니다.

기본적으로 검색은 사례에 민감합니다. 과도한 공간을 다듬고 케이스를 무시하도록 약간 수정했습니다.

for (i = 0; i < tagsToSearch.length; i++) {
    if (tagsToSearch[i].toLowerCase().indexOf(jQuery.trim(currentTag.tag.toLowerCase())) === 0) {
        matches.push(tagsToSearch[i]);
    }
}

내가 시도한 것은 사용자가 "Photoshop"에서 입력 할 때 "Adobe Photoshop"을 반환 할 수 있도록 이것을 다시 수정하는 것입니다. 나는 사용을 시도했다 match,하지만 변수가 패턴에있을 때 작동하는 것 같지 않습니다.

for (i = 0; i < tagsToSearch.length; i++) {
    var ctag = jQuery.trim(currentTag.tag);
    if (tagsToSearch[i].match("/" + ctag + "/i")) { // this never matches, presumably because of the variable 'ctag'
        matches.push(tagsToSearch[i]);
    }
}

이러한 방식으로 정규 검색을 수행하기위한 올바른 구문은 무엇입니까?

도움이 되었습니까?

해결책

JavaScript에서 동적으로 Regex를 사용하려면 regexp 객체. 나는 당신의 코드가 이것처럼 보일 것이라고 생각합니다 (테스트되지 않았고 확실하지 않지만 올바른 일반적인 아이디어) :

for (i = 0; i < tagsToSearch.length; i++) {
    var ctag = jQuery.trim(currentTag.tag);
    var regex = new RegExp(ctag, "i")
    if (tagsToSearch[i].match(regex)) {
        matches.push(tagsToSearch[i]);
    }
}

다른 팁

대신에

"/" + ctag + "/i"

사용

new RegExp(ctag, "i")

INDEXOF를 계속 사용할 수도 있고 === 0에서> = 0을 변경할 수도 있습니다.

for (i = 0; i < tagsToSearch.length; i++) {
    if (tagsToSearch[i].toLowerCase().indexOf(jQuery.trim(currentTag.tag.toLowerCase())) >= 0) {
        matches.push(tagsToSearch[i]);
    }
}

그러나 다시, 나는 틀릴 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top