Conteggio delle parole nella stringa

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")); 

Penso di aver capito bene, tranne che penso che l’affermazione if sia sbagliata. Come posso dire if(str(i) contiene uno spazio, aggiungi 1.

Modificare:

Ho scoperto (grazie a Blender) che posso farlo con molto meno codice:

 function WordCount(str) { return str.split(" ").length; } console.log(WordCount("hello world")); 

Usa parentesi quadre, non parentesi:

 str[i] === " " 

O charAt :

 str.charAt(i) === " " 

Puoi anche farlo con .split() :

 return str.split(' ').length; 

Provali prima di reinventare le ruote

dal conteggio numero di parole nella stringa utilizzando JavaScript

 function countWords(str) { return str.trim().split(/\s+/).length; } 

da http://www.mediacollege.com/internet/javascript/text/count-words.html

 function countWords(s){ s = s.replace(/(^\s*)|(\s*$)/gi,"");//exclude start and end white-space s = s.replace(/[ ]{2,}/gi," ");//2 or more space to 1 s = s.replace(/\n /,"\n"); // exclude newline with a start spacing return s.split(' ').filter(function(str){return str!="";}).length; //return s.split(' ').filter(String).length; - this can also be used } 

da Usa JavaScript per contare le parole in una stringa, SENZA usare una regex : questo sarà l’approccio migliore

 function WordCount(str) { return str.split(' ') .filter(function(n) { return n != '' }) .length; } 

Note dell’autore:

Puoi adattare questo script per contare le parole in qualsiasi modo tu voglia. La parte importante è s.split(' ').length – questo conta gli spazi. Lo script tenta di rimuovere tutti gli spazi extra (doppi spazi, ecc.) Prima di contare. Se il testo contiene due parole senza uno spazio tra di loro, le conteggia come una parola, ad esempio “Prima frase. Inizio della frase successiva”.

Un altro modo per contare le parole in una stringa. Questo codice conta le parole che contengono solo caratteri alfanumerici e caratteri “_”, “‘”, “-“, “‘”.

 function countWords(str) { var matches = str.match(/[\w\d\'\'-]+/gi); return matches ? matches.length : 0; } 

Dopo aver pulito la stringa, puoi abbinare caratteri non di spaziatura o contorni di parole.

Ecco due semplici espressioni regolari per acquisire le parole in una stringa:

  • Sequenza di caratteri non di spazio bianco: /\S+/g
  • Caratteri validi tra i limiti delle parole: /\b[az\d]+\b/g

L’esempio seguente mostra come recuperare il conteggio parole da una stringa, utilizzando questi pattern di acquisizione.

 /*Redirect console output to HTML.*/document.body.innerHTML='';console.log=function(s){document.body.innerHTML+=s+'\n';}; /*String format.*/String.format||(String.format=function(f){return function(a){return f.replace(/{(\d+)}/g,function(m,n){return"undefined"!=typeof a[n]?a[n]:m})}([].slice.call(arguments,1))}); // ^ IGNORE CODE ABOVE ^ // ================= // Clean and match sub-strings in a string. function extractSubstr(str, regexp) { return str.replace(/[^\w\s]|_/g, '') .replace(/\s+/g, ' ') .toLowerCase().match(regexp) || []; } // Find words by searching for sequences of non-whitespace characters. function getWordsByNonWhiteSpace(str) { return extractSubstr(str, /\S+/g); } // Find words by searching for valid characters between word-boundaries. function getWordsByWordBoundaries(str) { return extractSubstr(str, /\b[az\d]+\b/g); } // Example of usage. var edisonQuote = "I have not failed. I've just found 10,000 ways that won't work."; var words1 = getWordsByNonWhiteSpace(edisonQuote); var words2 = getWordsByWordBoundaries(edisonQuote); console.log(String.format('"{0}" - Thomas Edison\n\nWord count via:\n', edisonQuote)); console.log(String.format(' - non-white-space: ({0}) [{1}]', words1.length, words1.join(', '))); console.log(String.format(' - word-boundaries: ({0}) [{1}]', words2.length, words2.join(', '))); 
 body { font-family: monospace; white-space: pre; font-size: 11px; } 

Penso che questo metodo sia più di quanto tu voglia

 var getWordCount = function(v){ var matches = v.match(/\S+/g) ; return matches?matches.length:0; } 

Il modo più semplice che ho trovato finora è quello di usare una regex con split.

 var calculate = function() { var string = document.getElementById('input').value; var length = string.split(/[^\s]+/).length - 1; document.getElementById('count').innerHTML = length; }; 
   7 words 

String.prototype.match restituisce un array, possiamo quindi controllare la lunghezza,

Trovo che questo metodo sia più descrittivo

 var str = 'one two three four five'; str.match(/\w+/g).length; 

La risposta data da @ 7-isnotbad è estremamente vicina, ma non conta le righe di una sola parola. Ecco la correzione, che sembra rendere conto di ogni ansible combinazione di parole, spazi e nuove righe.

 function countWords(s){ s = s.replace(/\n/g,' '); // newlines to space s = s.replace(/(^\s*)|(\s*$)/gi,''); // remove spaces from start + end s = s.replace(/[ ]{2,}/gi,' '); // 2 or more spaces to 1 return s.split(' ').length; } 
 function countWords(str) { var regEx = /([^\u0000-\u007F]|\w)+/g; return str.match(regEx).length; } 

Spiegazione:

/([^\u0000-\u007F]|\w) corrisponde ai caratteri della parola – che è ottimo -> regex fa il lavoro pesante per noi. (Questo modello si basa sulla seguente risposta SO: https://stackoverflow.com/a/35743562/1806956 di @Landeeyo)

+ corrisponde all’intera stringa dei caratteri di parola specificati in precedenza, quindi in pratica raggruppiamo caratteri di parole.

/g significa che continua a guardare fino alla fine.

str.match(regEx) restituisce una matrice delle parole trovate – quindi contiamo la sua lunghezza.

   

So che è tardi, ma questa espressione regolare dovrebbe risolvere il tuo problema. Questo corrisponderà e restituirà il numero di parole nella stringa. Piuttosto poi quello che hai contrassegnato come una soluzione, che conterrebbe la parola spazio-spazio come 2 parole anche se in realtà è solo una parola.

 function countWords(str) { var matches = str.match(/\S+/g); return matches ? matches.length : 0; } 

Hai degli errori nel tuo codice.

 function WordCount(str) { var totalSoFar = 0; for (var i = 0; i < str.length; i++) { if (str[i] === " ") { totalSoFar += 1; } } return totalSoFar + 1; // you need to return something. } console.log(WordCount("Random String")); 

C'è un altro modo semplice usando le espressioni regolari:

 (text.split(/\b/).length - 1) / 2 

Il valore esatto può variare di circa 1 parola, ma conteggia anche i bordi delle parole senza spazio, ad esempio "word-word.word". E non conta le parole che non contengono lettere o numeri.

Potrebbe esserci un modo più efficiente per farlo, ma questo è ciò che ha funzionato per me.

 function countWords(passedString){ passedString = passedString.replace(/(^\s*)|(\s*$)/gi, ''); passedString = passedString.replace(/\s\s+/g, ' '); passedString = passedString.replace(/,/g, ' '); passedString = passedString.replace(/;/g, ' '); passedString = passedString.replace(/\//g, ' '); passedString = passedString.replace(/\\/g, ' '); passedString = passedString.replace(/{/g, ' '); passedString = passedString.replace(/}/g, ' '); passedString = passedString.replace(/\n/g, ' '); passedString = passedString.replace(/\./g, ' '); passedString = passedString.replace(/[\{\}]/g, ' '); passedString = passedString.replace(/[\(\)]/g, ' '); passedString = passedString.replace(/[[\]]/g, ' '); passedString = passedString.replace(/[ ]{2,}/gi, ' '); var countWordsBySpaces = passedString.split(' ').length; return countWordsBySpaces; 

}

è in grado di riconoscere tutti i seguenti come parole separate:

abc,abc = 2 parole,
abc/abc/abc = 3 parole (funziona con barre in avanti e indietro),
abc.abc = 2 parole,
abc[abc]abc = 3 parole,
abc;abc = 2 parole,

(alcuni altri suggerimenti ho provato a contare ogni esempio sopra come solo 1 parola x) anche:

  • ignora tutti gli spazi bianchi iniziali e finali

  • conta una singola lettera seguita da una nuova riga, come una parola – che ho trovato alcuni dei suggerimenti forniti in questa pagina non contano, ad esempio:
    un
    un
    un
    un
    un
    a volte viene contato come 0 x parole e altre funzioni lo contano solo come 1 parola x, invece di 5 x parole)

se qualcuno ha qualche idea su come migliorarlo, o più pulito / più efficiente – allora per favore aggiungi 2 centesimi! Spero che questo aiuti qualcuno fuori.

Ecco una funzione che conta il numero di parole in un codice HTML:

 $(this).val() .replace(/(( )|(<[^>]*>))+/g, '') // remove html spaces and tags .replace(/\s+/g, ' ') // merge multiple spaces into one .trim() // trim ending and beginning spaces (yes, this is needed) .match(/\s/g) // find all spaces by regex .length // get amount of matches 
 let leng = yourString.split(' ').filter(a => a.trim().length > 0).length 
 function totalWordCount() { var str ="My life is happy" var totalSoFar = 0; for (var i = 0; i < str.length; i++) if (str[i] === " ") { totalSoFar = totalSoFar+1; } totalSoFar = totalSoFar+ 1; return totalSoFar } console.log(totalWordCount()); 

Non sono sicuro che ciò sia stato detto in precedenza, o se è ciò che è necessario qui, ma non potresti rendere la stringa una matrice e poi trovare la lunghezza?

 let randomString = "Random String"; let stringWords = randomString.split(' '); console.log(stringWords.length);