Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 25.01.2019, 12:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,138

laimas,
если работает(сработает) лучше не трогать
Ответить с цитированием
  #12 (permalink)  
Старый 25.01.2019, 12:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

рони, ну если ввод к примеру будет таким
' Galaxy     samsung  '
, то шаблон получится такой
'Galaxy|    samsung'
.
Ответить с цитированием
  #13 (permalink)  
Старый 25.01.2019, 12:58
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Сообщение от рони Посмотреть сообщение
laimas,
если работает(сработает) лучше не трогать
Не повезло)
Не работает, при поиске Samsung, второй вариант что начинается на Galaxy уже не находит
Ответить с цитированием
  #14 (permalink)  
Старый 25.01.2019, 13:01
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Alexko64
второй вариант что начинается на Galaxy уже не находит
Что-то какая-то тайна покрытая мраком, ну не может быть такого.

var s = 'Samsung Galaxy', //в чем ищем
    v = ' Galaxy     samsung  ', //пусть ввели так
    r = new RegExp(v.trim().replace(/\s+/, '|'), 'gi'); //определяем шаблон поиска

alert(r.test(v)) //есть совпадение?


И если строка в которой ищем будет 'Galaxy Samsung', все равно будет найдено совпадение.

PS. рони подправил код, а вы скопировали до правки, проверьте еще раз, может в этом причина.

Последний раз редактировалось laimas, 25.01.2019 в 13:10.
Ответить с цитированием
  #15 (permalink)  
Старый 25.01.2019, 13:10
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Сообщение от laimas Посмотреть сообщение
Что-то какая-то тайна покрытая мраком, ну не может быть такого.

var s = 'Samsung Galaxy', //в чем ищем
    v = ' Galaxy     samsung  ', //пусть ввели так
    r = new RegExp(v.trim().replace(/\s+/, '|'), 'gi'); //определяем шаблон поиска

alert(r.test(v)) //есть совпадение?


И если строка в которой ищем будет 'Galaxy Samsung', все равно будет найдено совпадение.
Лучше один раз увидеть чем 100 раз услышать )
Вот залил на тест хост
http://mobidor.zzz.com.ua/test.php

Последний раз редактировалось Alexko64, 25.01.2019 в 13:16.
Ответить с цитированием
  #16 (permalink)  
Старый 25.01.2019, 13:11
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Сообщение от laimas Посмотреть сообщение

PS. рони подправил код, а вы скопировали до правки, проверьте еще раз, может в этом причина.
Момент...
Ответить с цитированием
  #17 (permalink)  
Старый 25.01.2019, 13:14
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Ну какая тайна, разбираем-же пример. не работает, на хостинге можно проверить где я залил
http://mobidor.zzz.com.ua/test.php

Последний раз редактировалось Alexko64, 25.01.2019 в 13:17.
Ответить с цитированием
  #18 (permalink)  
Старый 25.01.2019, 13:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А так:

pattern = new RegExp(pattern.trim().replace(/\s+/g, "|"), "gi"); 
return arr.filter(function(el) {
                //return Object.values(el).some(function(val) {
                        return pattern.test(Object.values(el)[0])
                //})
        })


А отображать и надо одно совпадение, которое начинается с первого введенного в поиске?

Последний раз редактировалось laimas, 25.01.2019 в 13:36.
Ответить с цитированием
  #19 (permalink)  
Старый 25.01.2019, 13:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,138

Alexko64,
замените
function fnSearch(arr, pattern) {
        pattern = escapeRegExp(pattern);
        pattern = new RegExp("(" + pattern.trim().replace(/\s+/g, "|") + ")", "i");
        return arr.filter(function(el) {
                pattern.lastIndex = 0;
                return pattern.test(el.name)
        })
};
Ответить с цитированием
  #20 (permalink)  
Старый 25.01.2019, 13:42
Интересующийся
Отправить личное сообщение для Alexko64 Посмотреть профиль Найти все сообщения от Alexko64
 
Регистрация: 17.04.2018
Сообщений: 26

Сообщение от laimas Посмотреть сообщение
А так:

pattern = new RegExp(pattern.trim().replace(/\s+/g, "|"), "gi"); 
return arr.filter(function(el) {
                //return Object.values(el).some(function(val) {
                        return pattern.test(Object.values(el)[0])
                //})
        })


А отображать и надо одно совпадение, которое начинается с первого введенного в поиске?
Не работает. Перезалил тест, посмотрите. Тееперь там все плохо.
попробуйте найти Galaxy, Samsung note 6 (его там и в помине нет но поиск выдает результат)
Добавил RAM для отличий между вариантами.
Отображать надо все совпадения которые подходят под шаблон, как в любом поиске
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Помогите, подскажите. Просмотр изображений на сайте с помощью javascript. Max25 Работа 1 13.04.2013 03:01
Помогите найти статью на этом сайте Опан Общие вопросы Javascript 2 20.03.2013 16:29
Нашел на сайте XSS скрипт. Помогите разобраться. klermonte Общие вопросы Javascript 0 15.02.2013 23:35
Мгновенный поиск, подсветка, переход к найденному rdfhnbhf Javascript под браузер 0 05.07.2012 12:28