Eu estava tentando contar palavras em um texto desta forma:
function WordCount(str) {
var totalSoFar = 0;
for (var i = 0; i < WordCount.length; i++)
if (str(i) === " ") { // if a space is found in str
totalSoFar = +1; // add 1 to total so far
}
totalsoFar += 1; // add 1 to totalsoFar to account for extra space since 1 space = 2 words
}
console.log(WordCount("Random String"));
Acho que entendi muito bem, exceto que a if
afirmação está errada. A parte que verifica se str(i)
contém um espaço e adiciona 1.
Editar:
Eu descobri (graças ao Blender) que posso fazer isso com muito menos código:
function WordCount(str) {
return str.split(" ").length;
}
console.log(WordCount("hello world"));
javascript
Valerio Bozz
fonte
fonte
str.split(' ').length
seria um método mais fácil? jsfiddle.net/j08691/zUuzdstr.split(' ')
então conte aqueles que não são strings de comprimento zero?Respostas:
Use colchetes, não parênteses:
Ou
charAt
:Você também pode fazer isso com
.split()
:fonte
Experimente antes de reinventar as rodas
de Contar o número de palavras na string usando JavaScript
de http://www.mediacollege.com/internet/javascript/text/count-words.html
de Use JavaScript para contar palavras em uma string, SEM usar um regex - esta será a melhor abordagem
fonte
Mais uma maneira de contar palavras em uma string. Este código conta palavras que contêm apenas caracteres alfanuméricos e caracteres "_", "'", "-", "'".
fonte
’'-
para que "Miau de gato" não conte como 3 palavras. E "entre"’'
em um regex. Use/[\w\d’'-]+/gi
para evitar avisos ESLint no-useless-escapeDepois de limpar a string, você pode combinar caracteres sem espaço em branco ou limites de palavras.
Aqui estão duas expressões regulares simples para capturar palavras em uma string:
/\S+/g
/\b[a-z\d]+\b/g
O exemplo abaixo mostra como recuperar a contagem de palavras de uma string, usando esses padrões de captura.
Encontrando Palavras Únicas
Você também pode criar um mapeamento de palavras para obter contagens exclusivas.
fonte
Eu acho que esse método é mais do que você quer
fonte
String.prototype.match
retorna uma matriz, podemos então verificar o comprimento,Acho que este método é mais descritivo
fonte
A maneira mais fácil que encontrei até agora é usar uma regex com divisão.
fonte
A resposta dada por @ 7-isnotbad é extremamente próxima, mas não conta linhas de uma única palavra. Aqui está a correção, que parece ser responsável por todas as combinações possíveis de palavras, espaços e novas linhas.
fonte
Aqui está minha abordagem, que simplesmente divide uma string por espaços, então, faz um loop no array e aumenta a contagem se o array [i] corresponder a um determinado padrão regex.
Chamado assim:
(adicionados caracteres e espaços extras para mostrar a precisão da função)
O str acima retorna 10, o que é correto!
fonte
[A-Za-z]
nadaPode haver uma maneira mais eficiente de fazer isso, mas é o que funcionou para mim.
}
é capaz de reconhecer todos os seguintes como palavras separadas:
abc,abc
= 2 palavras,abc/abc/abc
= 3 palavras (funciona com barras para frente e para trás),abc.abc
= 2 palavras,abc[abc]abc
= 3 palavras,abc;abc
= 2 palavras,(algumas outras sugestões que tentei contar cada exemplo acima como apenas 1 x palavra) também:
ignora todos os espaços em branco à esquerda e à direita
conta uma única letra seguida por uma nova linha, como uma palavra - o que eu descobri que algumas das sugestões dadas nesta página não contam, por exemplo:
a
a
a
a
a
às vezes é contado como 0 x palavras, e outras funções contam apenas como 1 x palavra, em vez de 5 x palavras)
se alguém tiver alguma ideia sobre como melhorá-lo, ou mais limpo / mais eficiente - adicione 2 centavos! Espero que isso ajude alguém.
fonte
Explicação:
/([^\u0000-\u007F]|\w)
corresponde a caracteres de palavras - o que é ótimo -> regex faz o trabalho pesado para nós. (Este padrão é baseado na seguinte resposta do SO: https://stackoverflow.com/a/35743562/1806956 por @Landeeyo)+
corresponde a toda a sequência de caracteres de palavras especificados anteriormente - portanto, basicamente agrupamos os caracteres de palavras./g
significa que continua procurando até o fim.str.match(regEx)
retorna uma matriz das palavras encontradas - então contamos seu comprimento.fonte
Para quem deseja utilizar o Lodash pode utilizar a
_.words
função:fonte
Isso tratará de todos os casos e é o mais eficiente possível. (Você não quer dividir ('') a menos que saiba de antemão que não há espaços maiores que um.):
fonte
Esta é uma função que conta o número de palavras em um código HTML:
fonte
fonte
Não tenho certeza se isso foi dito anteriormente ou se é o que é necessário aqui, mas você não poderia transformar a string em um array e depois encontrar o comprimento?
fonte
Acho que esta resposta dará todas as soluções para:
string.length
string.match(/\w+/g).length
string.length(/\r\n|\r|\n/).length
Espero que isso possa ajudar aqueles que estão procurando por essas 3 respostas.
fonte
string
para outro. É confuso. Me fez pensar por um segundostring.match()
é um método estático. Felicidades.A precisão também é importante.
O que a opção 3 faz é basicamente substituir todos os espaços em branco, exceto quaisquer espaços em branco por um
+1
e, em seguida, avalia isso para contar os1
dando a você a contagem de palavras.É o método mais preciso e rápido dos quatro que fiz aqui.
Observe que é mais lento do que
return str.split(" ").length;
mas é preciso quando comparado ao Microsoft Word.Veja as operações de arquivo / s e a contagem de palavras retornadas abaixo.
Aqui está um link para executar este teste de bancada. https://jsbench.me/ztk2t3q3w5/1
fonte
fonte
fonte
Eu sei que é tarde, mas esta regex deve resolver seu problema. Isso corresponderá e retornará o número de palavras em sua string. Em vez disso, aquele que você marcou como solução, que contaria espaço-espaço-palavra como 2 palavras, embora na verdade seja apenas 1 palavra.
fonte
Você cometeu alguns erros em seu código.
Existe outra maneira fácil de usar expressões regulares:
O valor exato pode diferir em cerca de 1 palavra, mas também conta as bordas das palavras sem espaço, por exemplo "palavra-palavra.palavra". E não conta palavras que não contenham letras ou números.
fonte
fonte