Как проверить что все слова есть в предложении, если количество слов не известно?
Не знаю как внутрь 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 (нет совпадений). |
Цитата:
|
Цитата:
|
Нет оператора "волнушка", есть оператор побитового НЕ, который изменяет значение бита на противоположное (инверсия).
Хотите понять как это взаимосвязано - открывайте калькулятор в Windows, выберите представление Программист, набирайте значение десятичные и просматривайте их бинарном и hex представлении. Компьютер как и человек оперирует не только положительными, но и отрицательными значениями. Только это у нас в извилинах наших заложено, а в компьютере для представления знака числа используется его старший бит. |
представленные варианты неправильно работают, если, например, в строке есть слово "пилорама", а проверяем наличие слова "рама".
проще всего собрать словарик из слов строки с предложением, а потом для каждого из искомых слов проверить нахождение в словарике. Либо, наоборот, собрать словарик из искомых слов (карту "слово -> количество вхождений"), потом обойти предложение и поинкрементить количества, и в конце обойти словарик, проверив что все больше 0. Этот вариант мне больше нравится, текст скорее всего больше чем сборище проверяемых слов |
Цитата:
function quest(str,arr)
{
return arr.filter(function(el) {
return str.split(/[-\.,\s!]+/).every(function(word) {
return el.toLowerCase().split(/[-\.,\s!]+/).indexOf(word.toLowerCase()) !== -1
})
})
}
var arr = ["В голове моей пилорама", "Да, да, да. пилорама", "Но кричалки и вопилки, Но кричалки и вопилки", "А также: Шумелки, пыхтелки и сопелки","Сочинию я неплохо иногда."]
alert(quest("в голове рама",arr));
alert(quest("рама",arr));
alert(quest("пилорама да",arr));
|
Цитата:
function a() {
let text = "мамалыга и папа акамама мыли раму хорошо, кошка мыла себя",
find = "мыла Мама раму".split(/\s+/),
re = new RegExp('(?<=\\s)('+find.join('|')+')(?=\\s)','gi'),
check = text.match(re).filter((e, i, a)=> a.indexOf(e) == i).length;
return check == find.length ? 'All words' : check + ' words'
}
alert(a())
|
Цитата:
const reg = /[-\.,\s!?]+/g,
text = "мама и папа мыли раму хорошо, кошка мыла себя",
search = "Мама мыла раму",
textArr = text.toLowerCase().split(reg),
searchArr = search.toLowerCase().split(reg);
if (searchArr.every(v => ~textArr.indexOf(v))) {
alert("все слова из text присутствуют в starttext")
}
метод indexOf есть как у строк так и у массивов разбив строку в массив мы решаем данную проблему |
| Часовой пояс GMT +3, время: 23:23. |