10
votes

Nombre de mots dans la chaîne en utilisant JavaScript

J'essaie de compter le nombre de mots dans une chaîne donnée à l'aide du code suivant:

var t = document.getElementById('MSO_ContentTable').textContent;

if (t == undefined) {
  var total = document.getElementById('MSO_ContentTable').innerText;                
} else {
  var total = document.getElementById('MSO_ContentTable').textContent;        
}
countTotal = cword(total);   

function cword(w) {
  var count = 0;
  var words = w.split(" ");
  for (i = 0; i < words.length; i++) {
    // inner loop -- do the count
    if (words[i] != "") {
      count += 1;
    }
  }

  return (count);
}


4 commentaires

Je ne suis pas sûr de votre question, mais quel est le chèque contre une chaîne vide?


En bref, je appelle la fonction COD () avec un paragraphe de chaîne sous forme d'argument.Mais la valeur de retour est différente dans FF et IE


Quel est un exemple de chaîne qui vous donne différents résultats entre navigateurs?


Lorsque j'utilise une grande partie de la chaîne, il me donne un résultat de curret, mais certaines modifient certaines entrées ANS espaces change de résultat ci-dessous est ma chaîne Bienvenue dans votre bibliothèque wiki! Vous pouvez commencer et ajouter du contenu à cette page en cliquant sur Modifier en haut de cette page ou en savoir plus sur les bibliothèques Wiki en cliquant sur [[Comment utiliser cette bibliothèque]]. Qu'est-ce qu'une bibliothèque wiki? Wikiwiki signifie rapide en Hawaïen. Une bibliothèque de wiki est une bibliothèque de documents dans laquelle les utilisateurs peuvent facilement modifier n'importe quelle page.


5 Réponses :


4
votes

Vous pouvez utiliser une utilisation intelligente de la méthode Remplacer () Bien que vous ne remplaciez rien.

var str = "the very long text you have...";

var counter = 0;

// lets loop through the string and count the words
str.replace(/(\b+)/g,function (a) {
   // for each word found increase the counter value by 1
   counter++;
})

alert(counter);


3 commentaires

Je suis nouveau dans JavaScript si plz dites-moi ce qui est (a) comme fonction arguments


un contient la valeur du mot actuel compté


J'aime ça, j'aime beaucoup ça. Bonne réponse.



22
votes

Vous pouvez utiliser split code> et ajouter un WordCounter à la chaîne code> prototype:

p>

if (!String.prototype.countWords) {
  String.prototype.countWords = function() {
    return this.length && this.split(/\s+\b/).length || 0;
  };
}

console.log(`'this string has five words'.countWords() => ${
  'this string has five words'.countWords()}`);
console.log(`'this string has five words ... and counting'.countWords() => ${
  'this string has five words ... and counting'.countWords()}`);
console.log(`''.countWords() => ${''.countWords()}`);


2 commentaires

Lorsque la chaîne est vide, ces fonctions renvoient 1.


@Juscodin (car la scission renvoie un tableau avec la chaîne vide en effet) ajusté la réponse, THX



11
votes

Je préférerais une solution de regex uniquement:

p>

\w+    between one and unlimited word characters
/g     greedy - don't stop after the first match


3 commentaires

C'est probablement l'approche la plus efficace lorsqu'elle traite du texte long.


Une bonne solution, bien qu'elle générera une erreur si la chaîne d'entrée est de la longueur 0 ou est tout espiègle.


Pourquoi le groupe dans Regex? c'est-à-dire pourquoi pas seulement / \ w + /



0
votes
//Count words in a string or what appears as words :-)

        function countWordsString(string){

            var counter = 1;

            // Change multiple spaces for one space
            string=string.replace(/[\s]+/gim, ' ');

            // Lets loop through the string and count the words
            string.replace(/(\s+)/g, function (a) {
               // For each word found increase the counter value by 1
               counter++;
            });

            return counter;
        }


        var numberWords = countWordsString(string);

0 commentaires

5
votes

C'est la meilleure solution que j'ai trouvée:

fonction wordcount (str) { var m = str.match (/ [^ \ s] + / g) retour m? m.length: 0; }

Ceci invertit la sélection WhitSpace, qui est meilleur que \ w + car il ne correspond que l'alphabet latin et _ (voir http://www.ecma-international.org/ecma-262/5.1/#sec-15.10.2.6 )

Si vous n'êtes pas prudent avec la correspondance de WhitSpace, vous compterez des cordes vides, des cordes avec des espaces de tête et de la touche de fuite, ainsi que toutes les chaînes blanchies en tant que correspondant lorsque cette solution gère des chaînes comme '' , 'A \ t \ t! \ r \ n # $% () d' correctement (si vous définissez "correct" comme 0 et 4).


2 commentaires

Cette réponse est sous-estimée OMI.


Yeah, Classic Stackoverflow où la bonne réponse réelle est cachée par deux réponses incomplètes avec plus de votes et une réponse clairement erronée acceptée comme correcte