Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.02.2013, 03:07
Интересующийся
Отправить личное сообщение для Batska Посмотреть профиль Найти все сообщения от Batska
 
Регистрация: 02.02.2013
Сообщений: 21

Поиск подстрок из массива в строке
Помогите, пожалуйста, новичку справится с такой проблемой:
У меня есть случайная строка, введенная пользователем, есть заданный мной массив строк. Мне надо узнать, является ли какой-либо элемент массива подстрокой введенной строки.
Например, есть массив family = {mom:'Мама', dad:'Папа',sister:'Сестра',brother:'Бр ат'} и случайная строка, например str='Наконец-то приехала Сестра!'. Программа выводит 'В строке упомянут член семьи'.
Я много разного читал, пробовал делать так str.indexOf(family) - не заработало, м.б., это очень глупо, но мне показалось это хорошей идеей - е прогонять же каждую подстроку . Есть ли подобные быстрые варианты? Помогите, пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 02.02.2013, 03:22
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Batska
str.indexOf(family) - не заработало, м.б., это очень глупо
Глупо. Чтобы не писать глупости, нужно читать документацию.

Сообщение от Batska
е прогонять же каждую подстроку
Почему нет?

var family = {mom:'Мама', dad:'Папа',sister:'Сестра',brother:'Бр ат'};
var str='Наконец-то приехала Сестра!';

for (var member in family) {
    if (str.indexOf(family[member]) >= 0) {
        alert ('В строке упомянут член семьи');
        break;
    }
}

Последний раз редактировалось danik.js, 02.02.2013 в 03:33.
Ответить с цитированием
  #3 (permalink)  
Старый 02.02.2013, 03:27
Интересующийся
Отправить личное сообщение для Batska Посмотреть профиль Найти все сообщения от Batska
 
Регистрация: 02.02.2013
Сообщений: 21

Спасибо огромное! Оказывается, вот как надо это записать!
Ответить с цитированием
  #4 (permalink)  
Старый 02.02.2013, 03:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

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 ('В строке упомянут член семьи');
}
Ответить с цитированием
  #5 (permalink)  
Старый 02.02.2013, 03:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Поправил первый код. Конечно indexOf(..) >= 0. Ждем поддержку ES6 в браузерах. С ней все проще - str.contains(needle)
Ответить с цитированием
  #6 (permalink)  
Старый 02.02.2013, 03:36
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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))
Ответить с цитированием
  #7 (permalink)  
Старый 02.02.2013, 03:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

В варианте с регуляркой можно решить проблему с чувствительностью к регистру, если создавать регулярку с флагом i:
new RegExp(family.join('|'), 'i');
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в строке другой подстроки средствами JS YAN Общие вопросы Javascript 13 23.07.2013 09:41
Поиск максимального числа в числовой строке. Serghter Общие вопросы Javascript 2 06.04.2012 00:48
поиск одинаковых значений элементов массива Valstor Общие вопросы Javascript 20 09.12.2011 17:56
поиск в строке cristalith jQuery 4 30.06.2011 18:19
Поиск последнего слова в строке AlexFadeev Элементы интерфейса 3 01.04.2010 18:56