Поиск подстрок из массива в строке
Помогите, пожалуйста, новичку справится с такой проблемой:
У меня есть случайная строка, введенная пользователем, есть заданный мной массив строк. Мне надо узнать, является ли какой-либо элемент массива подстрокой введенной строки.:help: Например, есть массив family = {mom:'Мама', dad:'Папа',sister:'Сестра',brother:'Бр ат'} и случайная строка, например str='Наконец-то приехала Сестра!'. Программа выводит 'В строке упомянут член семьи'. Я много разного читал, пробовал делать так str.indexOf(family) - не заработало, м.б., это очень глупо, но мне показалось это хорошей идеей - е прогонять же каждую подстроку:-? . Есть ли подобные быстрые варианты? Помогите, пожалуйста. |
Цитата:
Цитата:
var family = {mom:'Мама', dad:'Папа',sister:'Сестра',brother:'Бр ат'};
var str='Наконец-то приехала Сестра!';
for (var member in family) {
if (str.indexOf(family[member]) >= 0) {
alert ('В строке упомянут член семьи');
break;
}
}
|
Спасибо огромное! Оказывается, вот как надо это записать!
|
var family = {mom:'Мама', dad:'Папа',sister:'Сестра',brother:'Брат'};
var familyArray = [];
for (var member in family) {
familyArray.push(family[member]);
}
// получили ['Мама','Папа','Сестра','Брат'];
var familyRegExp = new RegExp(familyArray.join('|'));
var str='Наконец-то приехала Сестра!';
if (familyRegExp.test(str)) {
alert ('В строке упомянут член семьи');
}
Можно без цикла, если вам не нужны ключи:
var family = ['Мама','Папа','Сестра','Брат'];
var familyRegExp = new RegExp(family.join('|'));
var str='Наконец-то приехала Сестра!';
if (familyRegExp.test(str)) {
alert ('В строке упомянут член семьи');
}
|
Поправил первый код. Конечно indexOf(..) >= 0. Ждем поддержку ES6 в браузерах. С ней все проще - str.contains(needle)
|
function TstStr(str){
var family = {mom:'Мама', dad:'Папа',sister:'Сестра',brother:'Брат'}
var out='В строке упомянут член семьи';
for(var key in family) {
if(str.indexOf(family[key])!=-1) return out;
} return 'В строке не упомянут член семьи';
}
str='Наконец-то приехала Сестра!'
alert(TstStr(str))
|
В варианте с регуляркой можно решить проблему с чувствительностью к регистру, если создавать регулярку с флагом i:
new RegExp(family.join('|'), 'i');
|
| Часовой пояс GMT +3, время: 19:20. |