Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.03.2015, 20:48
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

Фильтр по начальным буквам слова
Есть массив фраз (может быть более одного слова в фразе). На входе есть последовательность символов - требуется найти все фразы, которые содержат слова, начинающиеся с этих символов.
Может есть у кого такая функция или ссылка на исходники?
Ответить с цитированием
  #2 (permalink)  
Старый 18.03.2015, 21:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

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));
Ответить с цитированием
  #3 (permalink)  
Старый 18.03.2015, 21:55
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

У меня вот так получилось. Создаю два RegExp и проверяю для них все фразы.
var re0 = new RegExp("[\\s|,|.]"+n, "gi");
var re1 = new RegExp("^"+n, "gi");

n - искомая последовательность символов
Ответить с цитированием
  #4 (permalink)  
Старый 20.03.2015, 15:53
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

var re0 = new RegExp("[\\s|,|.]"+n, "i");
var re1 = new RegExp("^"+n, "i");
Убрал 'g' в параметрах. Оно не нужно
Ответить с цитированием
  #5 (permalink)  
Старый 20.03.2015, 16:14
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

зачем тут вообще регулярки?
substring = lower(substring);
line = lower(line);
words = line.split(/\s+/);
for each word
    chunk = word.slice(0, substring.length);
    chunk === substring // {Boolean}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 20.03.2015 в 16:17.
Ответить с цитированием
  #6 (permalink)  
Старый 20.03.2015, 18:29
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

Цитата:
line.split(/\s+/);
А это у вас, извиняюсь, что в split? Не регулярка ли?
Ответить с цитированием
  #7 (permalink)  
Старый 20.03.2015, 20:51
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shasoft
А это у вас, извиняюсь, что в split? Не регулярка ли?
что в split как раз не суть. Можно пробел поставить, а можно регу, если первого не достаточно.
речь шла про сравнение
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 21.03.2015, 15:01
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

По моему с регулярками более понятно
var re0 = new RegExp("[\\s|,|.]"+substring, "i");
var re1 = new RegExp("^"+substring, "i");
if(  re0.test(line) || re1.test(line) )
{

}
Но, как известно, на вкус и цвет...
Можно было по скорости сравнить, но тут только практический тест поможет
Ответить с цитированием
  #9 (permalink)  
Старый 21.03.2015, 16:08
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shasoft
По моему с регулярками более понятно
ну-ну
alert(new RegExp('1+2').test('1+2'));
alert(new RegExp('Вася?!').test('Вася?!'));
alert(new RegExp('Вася(Крюков)').test('Вася(Крюков)'));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 21.03.2015 в 16:12.
Ответить с цитированием
  #10 (permalink)  
Старый 21.03.2015, 19:16
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

nerv_, сделал пример на plnkr.
Добавил и ваш вариант. Он не находит вариант "Грач,ВорОна,Сорока" если ввести маску "в".

Вариант с двумя RegExp переделали на один RegExp
var re = new RegExp("(^|[\\s|,|.])" + n, "i");

Последний раз редактировалось Shasoft, 21.03.2015 в 19:23.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтр по начальным символам Shasoft Angular.js 9 22.03.2015 09:25
Поиск слова в массиве killex Javascript под браузер 11 14.12.2014 02:37
Выбор случайного слова из списка alerzo Элементы интерфейса 3 19.04.2014 15:46
необходими разделить строку на слова и положить слова в массив при помощи цикла for oneee Общие вопросы Javascript 5 05.09.2012 14:30
Фильтр каталога Nivans Элементы интерфейса 4 15.07.2012 15:27