Счетчик слов в JavaScript - PullRequest
0 голосов
/ 27 марта 2019

Я работаю над лабораторным заданием для класса веб-приложений и застрял в реализации счетчика слов для базовой веб-страницы HTML.Настройка тестов и HTML уже сделана для нас.Мне просто нужно написать функцию countWords, которая принимает строку и возвращает количество слов.Это работает не так, как ваш традиционный счетчик слов.Слово определяется как что-либо AZ.Все остальное считается не частью слова.Итак, если строка просто "234@#$^", то количество слов равно 0. Итак, я не просто считаю пробелы, как большинство счетчиков слов.Все ответы, которые я нашел в StackOverflow на подобные вопросы, пытаются просто сосчитать пробелы и не работают для моей ситуации.Поэтому я и задал новый вопрос.

Моя идея заключалась в том, чтобы иметь оператор return, который соответствует любой группе az с использованием регулярного выражения, и возвращать длину.Затем, условно проверить наличие пустой строки или строки без букв az.

function countWords(s) {
   if(s === "" || s === "%$#^23#") {
      return 0
   }
   return s.match(/[^a-z]/gi).length
}

В данный момент оператор if просто соответствует двум тестам, чтобы я мог пройти свои тесты.Я не уверен, как написать другое регулярное выражение соответствия, чтобы проверить, нет ли букв в строке или пустой строки.Любая помощь приветствуется!Застрял на некоторое время.

Ответы [ 3 ]

0 голосов
/ 27 марта 2019

Как насчет этого регулярного выражения: /.*?[a-z]+.*?(\s|$)/gi

Использование return s.match(/.*?[a-z]+.*?(\s|$)/gi).length

Все, что содержит хотя бы 1 букву, считается.Тогда фраза O##ne two $#!+ @#%Three four^&&$ five будет считаться как 5 слов.

Редактировать : Если вы хотите быть злым, чтобы пройти тесты, когда найдено 0 совпадений, используйте (input.match(/.*?[a-z]+.*?(\s|$)/gi) || "").length

0 голосов
/ 27 марта 2019

Вы можете использовать метод функциональной замены, чтобы объединить все «слова» в массив, а затем просто вернуть длину массива.Это дает дополнительное преимущество: количество 0:


, пояснительная версия:

function countWords(str, words = []) {
  str.replace(/[A-Z]+/gi, (m) => words.push(m));
  return words.length;
}

, минимальная версия:

let countWords = (str, words = []) => 
    ( str.replace(/[A-Z]+/gi, (m) => words.push(m)), words.length );

let countWords = (str, words = []) => (str.replace(/[A-Z]+/gi, (m) => words.push(m)), words.length);

console.log( "##asdfadf###asfadf: " + countWords("##asdfadf###asfadf") )
console.log("##13424#$#$#$%: " + countWords("##13424#$#$#$%"));
0 голосов
/ 27 марта 2019

Сначала необходимо отфильтровать string, удалить все специальные символы и цифры:

var filtered_test = my_text.replace(/[^a-zA-Z ]/g, '');

затем сделать нормальный split и считать:

var words = filtered_test.split(" ");
console.log(words.length); //prints out the count of words
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...