filter('highlight', function() {
return function(data, search) {
if (data) {
data = data.toString();
if (search) {
for(var i = 0; i < search.length; i++) {
data = data.replace(new RegExp("(" + preg_quote(search[i]) + ")" , 'gi'), "<span class='search-highlight'>$1</span>");
}
}
}
return data;
};}).
мне нужно выделить данные, если оно содержит какой-либо элемент поиска. если данные «[email protected]» и поиск содержит «foo», функция вернет <span ..>foo</span>@bar.com
.Регулярное выражение для строки, которая не начинается и заканчивается последовательностью
Проблема в том, что массив поиска содержит «foo», «a», функция возвращает <sp<span ..>a</span>n ..>foo</span>@bar.com
, что нарушает вид страницы.
Идея - мне нужно пропустить что-нибудь, что уже окружено тегом <span></span>
. Как я могу это сделать?
Вместо того, чтобы изменять строку 'data' на месте и последовательно добавлять отмеченные значения, можете ли вы построить финальную строку в другом объекте и объединить все вместе в конце? Таким образом, вы можете избежать сопоставления изменений, которые вы заменили. –
Это полезная мысль! Можете ли вы помочь, как я могу это сделать ...? – fatCop
Зачем готовить всю еду самостоятельно? Иногда отправляйтесь в рестораны. http://www.the-art-of-web.com/javascript/search-highlight/ –