Как проверить что все слова есть в предложении, если количество слов не известно?
Не знаю как внутрь if() вставить несколько условий, если заранее количество условий неизвестно.
starttext="мама и папа мыли раму хорошо, кошка мыла себя" text="Мама мыла раму" var arrtext=text.split(' '); if(starttext.toLowerCase().indexOf(arrtext[0].toLowerCase()) != -1 ){alert("все слова из text присутствуют в starttext")} в этом коде я проверяю только первое слово, а мне нужно проверить все слова в text, но количество слов в text неизвестно. Их может быть любое количество в любом порядке. Как внутрь условия добавить проверку всех слов? |
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') |
let text = "мама и папа мыли раму хорошо, кошка мыла себя"; let search = "Мама мыла раму" let textL = text.toLowerCase(); let searchArr = search.toLowerCase().split(' '); if (searchArr.every(v => ~textL.indexOf(v))) { alert("все слова из text присутствуют в starttext") } вариант |
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') |
Vlasenko Fedor, только как и у меня, нужно не .split(' '), а split(/\s+/), понятно почему.
|
рони, а вот об этом я не подумал, что в исходнике могут быть дубликаты. :) Можно и удалить.
|
Цитата:
|
Цитата:
.....every(function(v) { return ~textL.indexOf(v) }) Эта функция возвращает -1, если не найдено, и чтобы не писать проверку на это значение и учитывая, что 0 (найдено, но в нулевой позиции), это false, проще инвертировать его ~. console.log(~0, ~1, ~-1); //результат -1, -2, 0 что означает в первых двух случаях true (найдено), и в последнем false (нет совпадений). |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 08:30. |