Нахождение количества слов без split () или тяжелого регулярного выражения - PullRequest
0 голосов
/ 05 апреля 2020

Я немного боролся с этим и не нашел ничего хорошего на сайте. Я пытаюсь найти количество слов в текстовой области без split () (потому что в некоторых ситуациях он пропускает пробелы и пропускает слова), вот что я пробовал:

text.addEventListener('input', () => {
    let wordCounter = 0;
    let sentenceCounter = 0;
    let charCounter = text.value.split('').length;
    let flag = false;
    let flag2 = false;

    if(text.value === ' ' || text.value === ''){
        wordCounter = 0;
    }

    for(let z = 0; z < text.value.length; ++z){
        if(text.value[z] == '.' && flag == false){
            sentenceCounter++;
            flag = true;
        }

        if((/\w/).test(text.value[z])){
            flag = false;
        }
    }

    for(let z = 0; z < text.value.length; ++z){
        if(text.value[z] == " " && flag2 == false){
            wordCounter++;
            flag2 = true;
        }

        if((/\w/.test(text.value[z]))){
            flag2 = false;
        }
    }

    sentences.innerHTML = `${sentenceCounter} : Sentences`
    char.innerHTML = `${charCounter} : Characters`
    words.innerHTML = `${wordCounter} : Words`
});

проблема здесь что он считает слова, только если нажать пробел, что означает, что «fa» не считается словом, а «fa». Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 05 апреля 2020

Вам нужно увеличить счетчик, когда вы найдете букву, а не когда вы найдете пробел. Вы также можете считать слова и предложения на одном и том же l oop. Чтобы закончить sh слово, пришлось изменить с сравнения на " " на \W.

let sentenceCounter = 0, sentenceFinished = false,
  wordCounter = 0, wordFinished = true,
  input = "Test text. Test.";
for (let z = 0; z < input.length; ++z) {
  var letter = input[z];
  if (!sentenceFinished && letter == ".") {
    sentenceCounter++;
    sentenceFinished = true;
  }

  if (sentenceFinished && /\w/.test(letter)) {
    sentenceFinished = false;
  }

  if (!wordFinished && /\W/.test(letter)) {
    wordFinished = true;
  }

  if (wordFinished && /\w/.test(letter)) {
    wordCounter++;
    wordFinished = false;
  }
}
console.log(`Words: ${wordCounter}, Sentences: ${sentenceCounter}`);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...