Как выполнить сопоставление Javascript с шаблоном, который зависит от переменной? - PullRequest
3 голосов
/ 28 апреля 2009

Текущая реализация Плагин предложения тега 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]);
    }
}

То, что я пытался сделать, это изменить это снова, чтобы иметь возможность возвращать «Adobe Photoshop», когда пользователь вводит «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]);
    }
}

Каков правильный синтаксис для выполнения поиска по регулярному выражению таким образом?

Ответы [ 3 ]

5 голосов
/ 28 апреля 2009

Если вы хотите динамически выполнять регулярные выражения в JavaScript, вы должны использовать 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]);
    }
}
2 голосов
/ 28 апреля 2009

вместо

"/" + ctag + "/i"

Используйте

new RegExp(ctag, "i")
0 голосов
/ 28 апреля 2009

Вы также можете продолжать использовать 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]);
    }
}

Но опять же, я могу ошибаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...