Фильтр по начальным буквам слова
Есть массив фраз (может быть более одного слова в фразе). На входе есть последовательность символов - требуется найти все фразы, которые содержат слова, начинающиеся с этих символов.
Может есть у кого такая функция или ссылка на исходники? |
Shasoft,
var phrase = ['Есть массив фраз','может быть более одного слова в фразе','На входе есть последовательность символов'], word = ['ма','си']; function oneINother(word,phrase) { function c(d) { return word.some(function(a) { return (new RegExp("^" + a)).test(d) }) } return phrase.filter(function(a) { return a.split(/\s+/).some(c) }) }; alert(oneINother(word,phrase)); |
У меня вот так получилось. Создаю два RegExp и проверяю для них все фразы.
var re0 = new RegExp("[\\s|,|.]"+n, "gi"); var re1 = new RegExp("^"+n, "gi"); n - искомая последовательность символов |
var re0 = new RegExp("[\\s|,|.]"+n, "i"); var re1 = new RegExp("^"+n, "i");Убрал 'g' в параметрах. Оно не нужно |
зачем тут вообще регулярки?
substring = lower(substring); line = lower(line); words = line.split(/\s+/); for each word chunk = word.slice(0, substring.length); chunk === substring // {Boolean} |
Цитата:
|
Цитата:
речь шла про сравнение |
По моему с регулярками более понятно
var re0 = new RegExp("[\\s|,|.]"+substring, "i"); var re1 = new RegExp("^"+substring, "i"); if( re0.test(line) || re1.test(line) ) { }Но, как известно, на вкус и цвет... :) Можно было по скорости сравнить, но тут только практический тест поможет |
Цитата:
alert(new RegExp('1+2').test('1+2')); alert(new RegExp('Вася?!').test('Вася?!')); alert(new RegExp('Вася(Крюков)').test('Вася(Крюков)')); |
nerv_, сделал пример на plnkr.
Добавил и ваш вариант. Он не находит вариант "Грач,ВорОна,Сорока" если ввести маску "в". Вариант с двумя RegExp переделали на один RegExp var re = new RegExp("(^|[\\s|,|.])" + n, "i"); |
Часовой пояс GMT +3, время: 18:25. |