Как сделать подсчет javascript слов, который исключает односимвольные слова - PullRequest
1 голос
/ 14 апреля 2020

Я хочу запустить скрипт для подсчета слов в текстовой области, который исключает все односимвольные слова. Поэтому, если кто-то вводит предложение «Это количество слов», я хочу, чтобы количество было 4, поскольку оно исключало «а».

У меня есть довольно базовые знания c jQuery, но я смог получить количество слов, включая однобуквенные слова:

var wordCounts = {};
    jQuery("#65").keyup(function() {
        var matches = this.value.match(/\b/g);
        wordCounts[this.id] = matches ? matches.length / 2 : 0;
        var finalCount = 0;
        jQuery.each(wordCounts, function(k, v) {
            finalCount += v;
        });
        console.log(wordCounts);
    }).keyup();

Буду ли я искать что-то вроде

if (matches.length >= 2) {
 finalCount += v;
}

Я не могу найти ничего, что делает это, и это, вероятно, просто, пожалуйста помощь:)

1 Ответ

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

Вы можете избежать односимвольных слов, изменив свое регулярное выражение до \b\w{2,}. Будет выполнен поиск границы слова, за которой следует слово длиной не более 2 символов.

var wordCounts = {};

jQuery("#65").on('input', function() {
  var matches = this.value.match(/\b\w{2,}/g).length;
  wordCounts[this.id] = matches; 
  console.log(wordCounts);
}).trigger('input');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="65">This is a word count</textarea>

Также обратите внимание, что each() l oop в обработчике событий является избыточным, поскольку id будет когда-либо выбирать только один элемент. Если вы хотите, чтобы это работало для нескольких элементов, используйте общий класс для них всех:

$(".count").on('input', function() {
  console.log(getWordCounts());
});

function getWordCounts() {
  let wordCounts = {};
  $('.count').each((i, el) => wordCounts[el.id] = el.value.match(/\b\w{2,}/g).length);
  return wordCounts;
}

console.log(getWordCounts());
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea id="65" class="count">This is a word count</textarea>
<textarea id="foo" class="count">Lorem ipsum dolor sit amet consectetur adipiscing elit</textarea>
...