변수에 의존하는 패턴으로 JavaScript 일치를 어떻게 수행합니까?
-
18-09-2019 - |
문제
현재 구현 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]);
}
}
그러나 다시, 나는 틀릴 수 있습니다.
제휴하지 않습니다 StackOverflow