Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   RegExp, поиск набора слов (https://javascript.ru/forum/misc/14781-regexp-poisk-nabora-slov.html)

Беляш 30.01.2011 19:39

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: надеюсь понятно выразился)

Aetae 30.01.2011 19:55

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

Как-то так наверное.
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))

Matre 30.01.2011 19:59

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

3 это колво слов

Беляш 30.01.2011 20:06

Aetae, Вы предлагаете использовать indexOf() - не сработает в старых версиях IE, в которых версия JS до 1.6.

PeaceCoder 30.01.2011 20:08

Цитата:

до 1.6.
чего? в 1.5 уже она есть

Беляш 30.01.2011 20:24

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.
...

Aetae 30.01.2011 20:32

Беляш
Цитата:

...There are seven new Array methods that...

Беляш 30.01.2011 20:40

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

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

Беляш 30.01.2011 20:49

Цитата:

Сообщение от Aetae (Сообщение 90521)
Беляш

Сори, видно ошибся.

Aetae 30.01.2011 21:09

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


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