Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Регулярное выражение (regexp) для поиска (https://javascript.ru/forum/dom-window/53411-regulyarnoe-vyrazhenie-regexp-dlya-poiska.html)

Momon 03.02.2015 11:41

Регулярное выражение (regexp) для поиска
 
Для поиска в массиве из нескольких тысяч строк использую такое регулярное выражение:
/(?=.*(\s|^|-)слово1)(?=.*(\s|^|-)слово2)(?=.*(\s|^|-)слово3)/.test.arr[i]
Оно использует упреждение для того чтобы найти в массиве те строки в которых встречаются все слова из запроса пользователя в любом порядке, причём поиск совпадения каждого конкретного слова идёт с его начала, а не откуда нибудь из середины.

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

рони 03.02.2015 12:39

Momon,
вариант без regexp
function foo(str, search)
  {
     str = str.split(' ').sort();
     search = search.split(' ').sort();
     var indx = 0;
     for (var i=0; i<search.length; i++)  {
         indx = str.indexOf(search[i], indx) + 1  ;
         if(!indx) return false
     }
     return true
  }

  alert(foo('баден', 'баден баден') )
  alert(foo('баден test баден', 'баден баден') )
  alert(foo('баден баден', 'баден баден') )

Momon 03.02.2015 15:34

рони,
Огромное спасибо! А где вы берете такие штуки?

рони 03.02.2015 15:58

Цитата:

Сообщение от Momon
А где вы берете такие штуки?

их бин подумать, ферштейн? :)


Часовой пояс GMT +3, время: 13:45.