Ich habe versucht, Wörter in einem Text folgendermaßen zu zählen:
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"));
Ich denke, ich habe das ziemlich gut verstanden, außer ich denke, dass die if
Aussage falsch ist. Der Teil, der prüft, ob str(i)
ein Leerzeichen enthalten ist, und 1 hinzufügt.
Bearbeiten:
Ich habe (dank Blender) herausgefunden, dass ich dies mit viel weniger Code tun kann:
function WordCount(str) {
return str.split(" ").length;
}
console.log(WordCount("hello world"));
javascript
Valerio Bozz
quelle
quelle
str.split(' ').length
einfachere Methode? jsfiddle.net/j08691/zUuzdstr.split(' ')
und dann diejenigen zählen, die keine Strings mit einer Länge von 0 sind?Antworten:
Verwenden Sie eckige Klammern, keine Klammern:
Oder
charAt
:Sie könnten es auch tun mit
.split()
:quelle
Probieren Sie diese aus, bevor Sie die Räder neu erfinden
from Anzahl der Wörter in einer Zeichenfolge mit JavaScript zählen
von http://www.mediacollege.com/internet/javascript/text/count-words.html
von Verwenden Sie JavaScript, um Wörter in einer Zeichenfolge zu zählen, OHNE einen regulären Ausdruck zu verwenden - dies ist der beste Ansatz
quelle
Eine weitere Möglichkeit, Wörter in einer Zeichenfolge zu zählen. Dieser Code zählt Wörter, die nur alphanumerische Zeichen und Zeichen "_", "'", "-", "'" enthalten.
quelle
’'-
damit "Cat's meow" nicht als 3 Wörter zählt. Und "dazwischen"’'
in einem regulären Ausdruck entkommen . Verwenden Sie/[\w\d’'-]+/gi
, um ESLint Warnungen vor unbrauchbarer Flucht zu vermeidenNach dem Bereinigen der Zeichenfolge können Sie Nicht-Leerzeichen oder Wortgrenzen abgleichen.
Hier sind zwei einfache reguläre Ausdrücke zum Erfassen von Wörtern in einer Zeichenfolge:
/\S+/g
/\b[a-z\d]+\b/g
Das folgende Beispiel zeigt, wie die Wortanzahl mithilfe dieser Erfassungsmuster aus einer Zeichenfolge abgerufen wird.
Einzigartige Wörter finden
Sie können auch eine Zuordnung von Wörtern erstellen, um eindeutige Zählungen zu erhalten.
quelle
Ich denke, diese Methode ist mehr als Sie wollen
quelle
String.prototype.match
Gibt ein Array zurück, können wir dann die Länge überprüfen.Ich finde diese Methode am aussagekräftigsten
quelle
Der einfachste Weg, den ich bisher gefunden habe, ist die Verwendung eines regulären Ausdrucks mit Split.
quelle
Die Antwort von @ 7-isnotbad ist extrem nah, zählt aber keine Einzelwortzeilen. Hier ist der Fix, der jede mögliche Kombination von Wörtern, Leerzeichen und Zeilenumbrüchen zu berücksichtigen scheint.
quelle
Hier ist mein Ansatz, bei dem ein String einfach durch Leerzeichen geteilt wird, dann das Array für Schleifen und die Anzahl erhöht wird, wenn das Array [i] mit einem bestimmten Regex-Muster übereinstimmt.
So aufgerufen:
(Zusätzliche Zeichen und Leerzeichen hinzugefügt, um die Genauigkeit der Funktion anzuzeigen)
Der obige Str gibt 10 zurück, was richtig ist!
quelle
[A-Za-z]
überhauptEs mag einen effizienteren Weg geben, dies zu tun, aber das hat bei mir funktioniert.
}}
Es ist in der Lage, alle folgenden Wörter als separate Wörter zu erkennen:
abc,abc
= 2 Wörter,abc/abc/abc
= 3 Wörter (funktioniert mit Schrägstrichen vorwärts und rückwärts),abc.abc
= 2 Wörter,abc[abc]abc
= 3 Wörter,abc;abc
= 2 Wörter,(einige andere Vorschläge, die ich versucht habe, zählen jedes Beispiel oben als nur 1 x Wort) es auch:
ignoriert alle führenden und nachfolgenden Leerzeichen
zählt einen einzelnen Buchstaben gefolgt von einer neuen Zeile als Wort - was ich festgestellt habe, dass einige der auf dieser Seite gegebenen Vorschläge nicht zählen, zum Beispiel:
a
a
a
a
a wird
manchmal als 0 x Wörter gezählt, und andere Funktionen zählen es nur als 1 x Wort anstelle von 5 x Wörtern)
Wenn jemand Ideen hat, wie man es verbessern oder sauberer / effizienter machen kann, dann addieren Sie bitte 2 Cent! Hoffe das hilft jemandem raus.
quelle
Erläuterung:
/([^\u0000-\u007F]|\w)
passt zu Wortzeichen - was großartig ist -> Regex erledigt das schwere Heben für uns. (Dieses Muster basiert auf der folgenden SO-Antwort: https://stackoverflow.com/a/35743562/1806956 von @Landeeyo)+
Entspricht der gesamten Zeichenfolge der zuvor angegebenen Wortzeichen. Daher gruppieren wir Wortzeichen grundsätzlich./g
bedeutet, dass es bis zum Ende sucht.str.match(regEx)
gibt ein Array der gefundenen Wörter zurück - also zählen wir seine Länge.quelle
Für diejenigen, die Lodash verwenden möchten, kann die
_.words
Funktion verwendet werden:quelle
Dies behandelt alle Fälle und ist so effizient wie möglich. (Sie möchten keine Aufteilung (''), es sei denn, Sie wissen vorher, dass es keine Leerzeichen mit einer Länge von mehr als einem gibt.):
quelle
Hier ist eine Funktion, die die Anzahl der Wörter in einem HTML-Code zählt:
quelle
quelle
Ich bin mir nicht sicher, ob dies zuvor gesagt wurde oder ob es das ist, was hier benötigt wird, aber konnten Sie die Zeichenfolge nicht zu einem Array machen und dann die Länge finden?
quelle
Ich denke, diese Antwort bietet alle Lösungen für:
string.length
string.match(/\w+/g).length
string.length(/\r\n|\r|\n/).length
Ich hoffe, dies kann denen helfen, die nach diesen 3 Antworten suchen.
quelle
string
in etwas anderes. Es ist verwirrend. Ich habe eine Sekunde lang nachgedacht, dass diesstring.match()
eine statische Methode ist. Prost.Genauigkeit ist auch wichtig.
Option 3 ersetzt im Grunde alle Leerzeichen bis auf Leerzeichen durch a
+1
und wertet diese dann aus, um die Anzahl1
der Wörter zu zählen.Es ist die genaueste und schnellste Methode der vier, die ich hier gemacht habe.
Bitte beachten Sie, dass es langsamer als ist,
return str.split(" ").length;
aber im Vergleich zu Microsoft Word genau ist.Siehe Datei ops / s und Anzahl der zurückgegebenen Wörter unten.
Hier ist ein Link, um diesen Test durchzuführen. https://jsbench.me/ztk2t3q3w5/1
quelle
quelle
quelle
Ich weiß, dass es spät ist, aber dieser reguläre Ausdruck sollte Ihr Problem lösen. Dies stimmt überein und gibt die Anzahl der Wörter in Ihrer Zeichenfolge zurück. Eher als die, die Sie als Lösung markiert haben, die Raum-Raum-Wort als 2 Wörter zählt, obwohl es wirklich nur 1 Wort ist.
quelle
Sie haben einige Fehler in Ihrem Code.
Es gibt noch einen anderen einfachen Weg, reguläre Ausdrücke zu verwenden:
Der genaue Wert kann sich um 1 Wort unterscheiden, zählt aber auch Wortränder ohne Leerzeichen, zum Beispiel "word-word.word". Und es werden keine Wörter gezählt, die keine Buchstaben oder Zahlen enthalten.
quelle
quelle