Javascript.RU

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

Фильтр по начальным символам
Нужен фильтр по начальным символам слов. Т.е. есть массив предложений:
  1. Вася умный
  2. Петя туповатый
  3. Коля великий
Вводим 'в' и получаем 1(Вася) и 3(великий).
Добавляем 'ва' и получаем только 1 (Вася)

Стандартный фильтр при вводе 'в' найдет все, так как он просто ищет наличие последовательности.

p.s.В обще-то можно и просто функцию без привязки к angular. А то вроде просто, но все-таки функция замороченная получается.
Ответить с цитированием
  #2 (permalink)  
Старый 18.03.2015, 21:45
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

Вроде придумал. Создаю два RegExp и проверяю для них все фразы.
var re0 = new RegExp("[\\s|,|.]"+n, "gi");
var re1 = new RegExp("^"+n, "gi");
n - искомая последовательность символов
Ответить с цитированием
  #3 (permalink)  
Старый 19.03.2015, 19:18
Аватар для MetaDriver
Аспирант
Отправить личное сообщение для MetaDriver Посмотреть профиль Найти все сообщения от MetaDriver
 
Регистрация: 24.04.2014
Сообщений: 66

Сообщение от Shasoft Посмотреть сообщение
Вроде придумал. Создаю два RegExp и проверяю для них все фразы.
var re0 = new RegExp("[\\s|,|.]"+n, "gi");
var re1 = new RegExp("^"+n, "gi");
n - искомая последовательность символов
Работает? Примерчик сделай прямо тут, пжалста, если не трудно. Полезная штука в принципе, для всяких гридов и т.п.
Ответить с цитированием
  #4 (permalink)  
Старый 20.03.2015, 15:55
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

var re0 = new RegExp("[\\s|,|.]"+n, "i");
var re1 = new RegExp("^"+n, "i");
Убрал 'g' из параметров. Вроде работает. Хотел в один RegExp объединить, но знаний не хватает.
Ответить с цитированием
  #5 (permalink)  
Старый 21.03.2015, 03:54
Аватар для MetaDriver
Аспирант
Отправить личное сообщение для MetaDriver Посмотреть профиль Найти все сообщения от MetaDriver
 
Регистрация: 24.04.2014
Сообщений: 66

Сообщение от Shasoft Посмотреть сообщение
var re0 = new RegExp("[\\s|,|.]"+n, "i");
var re1 = new RegExp("^"+n, "i");
Убрал 'g' из параметров. Вроде работает. Хотел в один RegExp объединить, но знаний не хватает.
Я тоже не силён в регулярках, но попробовал бы так:
var re = new RegExp("^|[\\s|,|.]"+n, "i");
--
upd.
C утречка глянул ещё разок. Поправка:
var re = new RegExp("(^|[\\s|,|.])"+n, "i");
--
upd 2
Мне сейчас регулярки как раз актуальны (делаю формы для редактирования с валидацией), а посему глянул доки.
Всё может оказаться попроще. Цитата из мануала:
Код:
    \b   :   Позиция между символом ASCII и не символом ASCII (граница слова)
итого имеем две простых версии:
1)
var re = new RegExp("\b"+n, "i");
2)
var re = new RegExp("(^|\b)"+n, "i");

Первый вариант будет/не будет работать в зависимости от того, считается ли начало строки границей слова, второй вроде по любому должон работать

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

MetaDriver,
Честно говоря не очень понимаю что значит символ ASCII в данном случае. По идее a-z тоже символ ASCII.
Ответить с цитированием
  #7 (permalink)  
Старый 21.03.2015, 18:01
Аватар для MetaDriver
Аспирант
Отправить личное сообщение для MetaDriver Посмотреть профиль Найти все сообщения от MetaDriver
 
Регистрация: 24.04.2014
Сообщений: 66

Сообщение от Shasoft Посмотреть сообщение
MetaDriver,
Честно говоря не очень понимаю что значит символ ASCII в данном случае. По идее a-z тоже символ ASCII.
Не бери в голову (пока). Просто проверь. // и отпишись о результатах
У меня PhpStorm говорит что будут работать оба последних варианта (в Web/PhpStorm есть тестер RegExp'ов).

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

Сделал пример на plnkr.

Вариант с \b что-то не работает.
Ответить с цитированием
  #9 (permalink)  
Старый 21.03.2015, 23:03
Аватар для MetaDriver
Аспирант
Отправить личное сообщение для MetaDriver Посмотреть профиль Найти все сообщения от MetaDriver
 
Регистрация: 24.04.2014
Сообщений: 66

Сообщение от Shasoft Посмотреть сообщение
Сделал пример на plnkr.

Вариант с \b что-то не работает.
Да, действительно, не работает. Даже с исправлением (\\b) (бэкслеш нужно удваивать при создании в конструкторе из строки). Ну и ладно, зато "(^|[\\s|,|.])" + n работает безотказно.
Видимо плагин для PhpStorm (как выяснилось, это сторонний плагин RegexpTester ), местами не совсем корректен.
// А вообще плагин классный, рекомендую, я сегодня на нём быстро отладил десяток регулярок для своей автоформы.

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

MetaDriver,
Я на https://regex101.com/ тестирую RegExp-ы обычно.

p.s.исправил \b на \\b

Нашел проблему: если в искомой строке присутствуют управляющие символы RegExp (к примеру '('), то динамическое создание RegExp происходит с ошибкой. Так что перешел на вариант предложенный тут.

Последний раз редактировалось Shasoft, 22.03.2015 в 10:06.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
фильтр для 60ти полей таблицы skrudjmakdak Элементы интерфейса 3 12.06.2014 10:03
Фильтр для таблицы через select-ты! Hedkost jQuery 1 25.02.2014 16:39
Фильтр select на jquery dsk8m jQuery 2 21.01.2014 19:43
ng-repeat кастомный фильтр для фильтрации обьектов (непонятное поведение) VerDiz Angular.js 10 04.08.2013 15:42
Фильтр каталога Nivans Элементы интерфейса 4 15.07.2012 15:27