Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.06.2020, 20:30
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Как проверить что все слова есть в предложении, если количество слов не известно?
Не знаю как внутрь if() вставить несколько условий, если заранее количество условий неизвестно.

starttext="мама и папа мыли раму хорошо, кошка мыла себя"
text="Мама мыла раму"
var arrtext=text.split(' ');

if(starttext.toLowerCase().indexOf(arrtext[0].toLowerCase()) != -1 ){alert("все слова из text присутствуют в starttext")}


в этом коде я проверяю только первое слово, а мне нужно проверить все слова в text, но количество слов в text неизвестно. Их может быть любое количество в любом порядке. Как внутрь условия добавить проверку всех слов?
Ответить с цитированием
  #2 (permalink)  
Старый 27.06.2020, 20:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

let text = "мама и папа мыли раму хорошо, кошка мыла себя",
    find = "Мама мыла раму".split(' ');

let re = new RegExp(find.join('|'),'gi');

let check = text.match(re).length;

alert(check == find.length ? 'All words' : check + ' words')

Последний раз редактировалось laimas, 27.06.2020 в 20:54.
Ответить с цитированием
  #3 (permalink)  
Старый 27.06.2020, 21:12
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

let text = "мама и папа мыли раму хорошо, кошка мыла себя";
let search = "Мама мыла раму"
let textL = text.toLowerCase();
let searchArr = search.toLowerCase().split(' ');

if (searchArr.every(v => ~textL.indexOf(v))) {
    alert("все слова из text присутствуют в starttext")
}

вариант

Последний раз редактировалось Vlasenko Fedor, 27.06.2020 в 21:21.
Ответить с цитированием
  #4 (permalink)  
Старый 27.06.2020, 21:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

laimas,

let text = "мама мама мама",
    find = "Мама мыла раму".split(' ');

let re = new RegExp(find.join('|'),'gi');

let check = text.match(re).length;

alert(check == find.length ? 'All words' : check + ' words')
Ответить с цитированием
  #5 (permalink)  
Старый 27.06.2020, 21:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Vlasenko Fedor, только как и у меня, нужно не .split(' '), а split(/\s+/), понятно почему.
Ответить с цитированием
  #6 (permalink)  
Старый 27.06.2020, 21:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

рони, а вот об этом я не подумал, что в исходнике могут быть дубликаты. Можно и удалить.
Ответить с цитированием
  #7 (permalink)  
Старый 28.06.2020, 12:24
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Сообщение от Vlasenko Fedor Посмотреть сообщение
let text = "мама и папа мыли раму хорошо, кошка мыла себя";
let search = "Мама мыла раму"
let textL = text.toLowerCase();
let searchArr = search.toLowerCase().split(/\s+/);

if (searchArr.every(v => ~textL.indexOf(v))) {
    alert("все слова из text присутствуют в starttext")
}

вариант
Спасибо. Наверное это самый быстрый вариант. как я понял (хотя я вообще ничего не понял) внутри if как то поместилась стрелочная функция, которая как-то превратится в true && true && true для каждого элемента массива. И наверное при первом false поиск уже продолжаться не будет? а волнушка ~ это как return? вот это => ~ мне напоминает египетские иероглифы...
Ответить с цитированием
  #8 (permalink)  
Старый 28.06.2020, 13:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от sovsem-nub
внутри if как то поместилась стрелочная функция
Не как-то, а анонимная функция (callback), параметр функции every, которая возвращает результат функции indexOf. Равно как

.....every(function(v) { return ~textL.indexOf(v) })


Эта функция возвращает -1, если не найдено, и чтобы не писать проверку на это значение и учитывая, что 0 (найдено, но в нулевой позиции), это false, проще инвертировать его ~.

console.log(~0, ~1, ~-1); //результат -1, -2, 0


что означает в первых двух случаях true (найдено), и в последнем false (нет совпадений).
Ответить с цитированием
  #9 (permalink)  
Старый 28.06.2020, 13:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от sovsem-nub
Как проверить что все слова есть в предложении
https://javascript.ru/forum/misc/698...tml#post459300
Ответить с цитированием
  #10 (permalink)  
Старый 28.06.2020, 15:01
Аватар для sovsem-nub
Профессор
Отправить личное сообщение для sovsem-nub Посмотреть профиль Найти все сообщения от sovsem-nub
 
Регистрация: 15.10.2014
Сообщений: 255

Сообщение от laimas Посмотреть сообщение

console.log(~0, ~1, ~-1); //результат -1, -2, 0


что означает в первых двух случаях true (найдено), и в последнем false (нет совпадений).
как понять "Инвертировать" волнушка умножает на -1 и вычитает 1?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие div блока при первом визите на сайт Nushaba Общие вопросы Javascript 28 20.12.2013 21:24
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Сторонние библиотеки - быть или не быть? IIIEPJIOK Оффтопик 64 21.03.2009 19:39
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
Как вызвать функцию если менять надо не все параметры? britanik Общие вопросы Javascript 3 07.03.2009 23:13