Поиск подстрок из массива в строке
Помогите, пожалуйста, новичку справится с такой проблемой:
У меня есть случайная строка, введенная пользователем, есть заданный мной массив строк. Мне надо узнать, является ли какой-либо элемент массива подстрокой введенной строки.: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, время: 03:26. |