Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.01.2011, 19:39
Интересующийся
Отправить личное сообщение для Беляш Посмотреть профиль Найти все сообщения от Беляш
 
Регистрация: 14.03.2010
Сообщений: 16

RegExp, поиск набора слов
Условие пройдет при наличии хотя бы одного из набора слов(в данном случае их 3) в строке:
var s = "aaa bbb ccc ddd eee";
var expr = new RegExp('aaa|bbb|ccc','i');
if(expr.test(stroka)){
	console.log('OK');
}

Мне же необходим такой поиск, при котором в строке искался бы весь набор слов, а не одно из набора, и если весь набор присутствует в строке, то условие выполняется.

PS: надеюсь понятно выразился)
Ответить с цитированием
  #2 (permalink)  
Старый 30.01.2011, 19:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,473

И порядок произвольный?

Как-то так наверное.
function contains(str,arr){
   var i=arr.length;
   while(i--)if(str.indexOf(arr[i])==-1)return false;
   return true
}
str = "aaa bbb ccc ddd eee";
arr = ['aaa','bbb','ccc'];
alert(contains(str,arr))
arr = ['aaa','bbb','ccc','xxx'];
alert(contains(str,arr))
Ответить с цитированием
  #3 (permalink)  
Старый 30.01.2011, 19:59
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

(s.match(/aaa|bbb|ccc/i) || []).length === 3;

3 это колво слов
Ответить с цитированием
  #4 (permalink)  
Старый 30.01.2011, 20:06
Интересующийся
Отправить личное сообщение для Беляш Посмотреть профиль Найти все сообщения от Беляш
 
Регистрация: 14.03.2010
Сообщений: 16

Aetae, Вы предлагаете использовать indexOf() - не сработает в старых версиях IE, в которых версия JS до 1.6.
Ответить с цитированием
  #5 (permalink)  
Старый 30.01.2011, 20:08
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Цитата:
до 1.6.
чего? в 1.5 уже она есть
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #6 (permalink)  
Старый 30.01.2011, 20:24
Интересующийся
Отправить личное сообщение для Беляш Посмотреть профиль Найти все сообщения от Беляш
 
Регистрация: 14.03.2010
Сообщений: 16

PeaceCoder, https://developer.mozilla.org/en/New_in_JavaScript_1.6
Цитата:
...There are seven new Array methods that can be separated into two categories, item location methods and iterative methods. The item location methods are:
indexOf() - returns the index of the given item's first occurrence.
lastIndexOf() - returns the index of the given item's last occurrence.
...
Ответить с цитированием
  #7 (permalink)  
Старый 30.01.2011, 20:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,473

Беляш
Цитата:
...There are seven new Array methods that...
Ответить с цитированием
  #8 (permalink)  
Старый 30.01.2011, 20:40
Интересующийся
Отправить личное сообщение для Беляш Посмотреть профиль Найти все сообщения от Беляш
 
Регистрация: 14.03.2010
Сообщений: 16

Matre, спасибо. Единственно необходимо добавить флаг g, чтобы, как я понимаю, не прекращался поиск после первого совпадения.

(s.match(/aaa|bbb|ccc/ig) || []).length === 3;
Ответить с цитированием
  #9 (permalink)  
Старый 30.01.2011, 20:49
Интересующийся
Отправить личное сообщение для Беляш Посмотреть профиль Найти все сообщения от Беляш
 
Регистрация: 14.03.2010
Сообщений: 16

Сообщение от Aetae Посмотреть сообщение
Беляш
Сори, видно ошибся.
Ответить с цитированием
  #10 (permalink)  
Старый 30.01.2011, 21:09
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,473

var s = "aaa bbb ccc ddd eee";
alert( (s.match(/aaa|bbb|ccc/ig) || []).length === 3 )

var s = "aaa bbb ccc ddd bbb eee bbb";
alert( (s.match(/aaa|bbb|ccc/ig) || []).length === 3 )

fail
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в тексте javascript jQuery 3 31.05.2011 11:40
RegExp - поиск в найденном. Не могу понять senseysensor Общие вопросы Javascript 9 17.10.2010 21:55
RegExp - Глобальный поиск c запоминанием р-тов retator Общие вопросы Javascript 1 11.08.2010 22:53
Поиск определённых слов в контенте Yellow79 Элементы интерфейса 5 14.05.2010 20:37
Поиск русских слов с помощью \b не проходит Jury Общие вопросы Javascript 2 18.03.2010 12:05