Как выполнить Regex на listjs hackerlist?

Я хотел бы выполнить регулярное выражение для функциональности поиска List.js. Как это работает по умолчанию, это то, что он ищет слово, которое существует в целом предложении. Я хочу добиться того, чтобы он искал слово, являющееся началом предложения.

На картинке выше вы видите, что "есть" существует во всех 4 предложениях, но я хочу, чтобы оно было только в коротком списке, где "было" - это первое слово каждого предложения.

Источник ListJs

1 ответ

Решение

Спасибо ребята за предложения. На данный момент я сделал обходной путь, изменив файл core list.js. Я заменил:

var search = {
    list: function() {
        for (var k = 0, kl = list.items.length; k < kl; k++) {
            search.item(list.items[k]);
        }
    },
    item: function(item) {
        item.found = false;
        for (var j = 0, jl = columns.length; j < jl; j++) {
            if (search.values(item.values(), columns[j])) {
                item.found = true;
                return;
            }
        }
    },
    values: function(values, column) {
        if (values.hasOwnProperty(column)) {
            text = toString(values[column]).toLowerCase();
            if ((searchString !== "") && (text.search(searchString) > -1)) {
                return true;
            }
        }
        return false;
    },
    reset: function() {
        list.reset.search();
        list.searched = false;
    }
};

С

if (typeof String.prototype.startsWith != 'function') {
    // see below for better implementation!
    String.prototype.startsWith = function (str) {
        return this.indexOf(str) === 0;
    };
}
var search = {
    list: function() {
        for (var k = 0, kl = list.items.length; k < kl; k++) {
            search.item(list.items[k]);
        }
    },
    item: function(item) {
        item.found = false;
        for (var j = 0, jl = columns.length; j < jl; j++) {
            if (search.values(item.values(), columns[j])) {
                item.found = true;
                return;
            }
        }
    },
    values: function(values, column) {
        if (values.hasOwnProperty(column)) {
            text = toString(values[column]).toLowerCase();
            if ((searchString !== "") && (text.startsWith(searchString))) {
                return true;
            }
        }
        return false;
    },
    reset: function() {
        list.reset.search();
        list.searched = false;
    }
};

Объяснение: Я создал функцию StartWith (найден в stackru), которая проверяет, начинается ли строка поиска с точных символов данного предложения, и изменил функцию значений родительского блока поиска. и заменил его функцию text.search() моей функцией startWith.

Другие вопросы по тегам