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: надеюсь понятно выразился) |
И порядок произвольный?
Как-то так наверное.
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))
|
(s.match(/aaa|bbb|ccc/i) || []).length === 3;
3 это колво слов |
Aetae, Вы предлагаете использовать indexOf() - не сработает в старых версиях IE, в которых версия JS до 1.6.
|
Цитата:
|
PeaceCoder, https://developer.mozilla.org/en/New_in_JavaScript_1.6
Цитата:
|
Беляш
Цитата:
|
Matre, спасибо. Единственно необходимо добавить флаг g, чтобы, как я понимаю, не прекращался поиск после первого совпадения.
(s.match(/aaa|bbb|ccc/ig) || []).length === 3; |
Цитата:
|
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, время: 07:11. |