Ich bin nicht sehr gut mit der Manipulation von Zeichenfolgen in JavaScript und habe mich gefragt, wie Sie eine Zeichenfolge kürzen könnten, ohne ein Wort abzuschneiden. Ich weiß, wie man Teilzeichenfolgen verwendet, aber nicht indexOf oder irgendetwas wirklich gut.
Angenommen, ich hätte die folgende Zeichenfolge:
text = "this is a long string I cant display"
Ich möchte es auf 10 Zeichen reduzieren, aber wenn es nicht mit einem Leerzeichen endet, beenden Sie das Wort. Ich möchte nicht, dass die Zeichenfolgenvariable so aussieht:
"Dies ist eine lange Saite, die ich nicht dis"
Ich möchte, dass das Wort beendet wird, bis ein Leerzeichen auftritt.
javascript
string
substring
Josh Bedo
quelle
quelle
" too many spaces ".trim()
Antworten:
Wenn ich das richtig verstehe, möchten Sie eine Zeichenfolge auf eine bestimmte Länge kürzen (z. B.
"The quick brown fox jumps over the lazy dog"
auf beispielsweise 6 Zeichen kürzen , ohne ein Wort abzuschneiden).In diesem Fall können Sie Folgendes versuchen:
quelle
maxLength + 1
) bereits angegeben , aber ich habe es behoben, indem ich einfach diese Zeile oben hinzugefügt habe:var yourString += " ";
fox jumps over the lazy dog
Teil wegnehmen , wird das Ergebnis leider seinThe quick brown
, wann es sein sollteThe quick brown fox
.Es gibt viele Möglichkeiten, dies zu tun, aber ein regulärer Ausdruck ist eine nützliche einzeilige Methode:
Dieser Ausdruck gibt die ersten 11 (beliebigen) Zeichen sowie alle nachfolgenden Nicht-Leerzeichen zurück.
Beispielskript:
Ausgabe:
quelle
t.replace(new RegExp("^(.{"+length+"}[^\s]*).*"), "$1")
{30}
Ich bin ein bisschen überrascht, dass es für ein einfaches Problem wie dieses so viele Antworten gibt, die schwer zu lesen sind und einige, einschließlich der ausgewählten, nicht funktionieren.
Normalerweise möchte ich, dass die Ergebniszeichenfolge höchstens aus
maxLen
Zeichen besteht. Ich benutze dieselbe Funktion auch, um die Slugs in URLs zu verkürzen.str.lastIndexOf(searchValue[, fromIndex])
Nimmt einen zweiten Parameter, der der Index ist, an dem die Suche in der Zeichenfolge rückwärts gestartet wird, um die Dinge effizient und einfach zu gestalten.Dies ist eine Beispielausgabe:
Und für die Schnecke:
quelle
str
istundefined
. Ich fügte hinzuif (!str || str.length <= maxLen) return str;
str.length <= maxLen
. Andernfalls wird eine leere Zeichenfolge zurückgegeben.Jeder scheint zu vergessen, dass indexOf zwei Argumente benötigt - die übereinstimmende Zeichenfolge und den zu zeigenden Zeichenindex. Sie können die Zeichenfolge am ersten Leerzeichen nach 10 Zeichen brechen.
quelle
Lodash hat eine speziell dafür geschriebene Funktion:
_.truncate
quelle
Basierend auf der NT3RP-Antwort, die einige Eckfälle nicht behandelt, habe ich diesen Code erstellt. Es wird garantiert, dass kein Text mit einem Ereignis der Größe> maxLength zurückgegeben wird,
...
bei dem am Ende Auslassungspunkte hinzugefügt wurden.Dies behandelt auch einige Eckfälle wie einen Text, bei dem ein einzelnes Wort> maxLength ist
Ich denke, Sie können die JQuery-Abhängigkeit leicht entfernen, wenn Sie dies stört.
quelle
$.extend
nicht umgekehrt werden?Hier ist eine Lösung in einer Zeile.
quelle
Ich bin zu spät zur Party, aber hier ist eine kleine und einfache Lösung, die ich mir ausgedacht habe, um eine Menge Worte zurückzugeben.
Es hängt nicht direkt mit Ihrer Anforderung an Charaktere zusammen , aber es dient dem gleichen Ergebnis , nach dem Sie meiner Meinung nach gesucht haben.
Das Arbeitsbeispiel finden Sie hier: https://jsfiddle.net/bx7rojgL/
quelle
Dies schließt das letzte Wort aus, anstatt es einzuschließen.
Verwendung:
quelle
Ich habe einen anderen Ansatz gewählt. Obwohl ich ein ähnliches Ergebnis benötigte, wollte ich meinen Rückgabewert unter der angegebenen Länge halten.
Bearbeiten Ich habe es hier ein wenig überarbeitet : JSFiddle-Beispiel . Es wird wieder mit dem ursprünglichen Array verbunden, anstatt es zu verketten.
quelle
Code-Snippet anzeigen
quelle
Sie können
truncate
unten einen Einzeiler verwenden:quelle
}}
var s = "Dies ist eine lange Zeichenfolge und ich kann nicht alles erklären"; verkürzen (s, 10, '...')
/* "das ist .." */
quelle
Hier ist noch ein weiterer Code, der entlang von Satzzeichen abgeschnitten wird (suchte danach und Google hat diese Frage hier gefunden). Musste selbst eine Lösung finden, also habe ich das in 15 Minuten gehackt. Findet alle Vorkommen von. ! ? und schneidet an jeder Position von diesen ab, die <als
len
quelle
Typoskript und mit Ellipsen :)
quelle
Für das, was es wert ist, habe ich dies geschrieben, um bis zur Wortgrenze abzuschneiden, ohne Interpunktion oder Leerzeichen am Ende der Zeichenfolge zu hinterlassen:
quelle
Fanden die gewählten Lösungen nicht zufriedenstellend. Also habe ich etwas geschrieben, das generisch ist und sowohl im ersten als auch im letzten Teil Ihres Textes funktioniert (so etwas wie substr, aber für Wörter). Sie können auch festlegen, ob die Leerzeichen in der Zeichenanzahl weggelassen werden sollen.
quelle
Ich bin zu spät gekommen, aber ich denke, diese Funktion macht genau das, was OP verlangt. Sie können die SENTENCE- und die LIMIT-Werte leicht für verschiedene Ergebnisse ändern.
Die Ausgabe dieses Snippets ist dort, wo das LIMIT 11 ist:
quelle
Mit Randbedingungen wie leerem Satz und sehr langem ersten Wort. Außerdem wird keine sprachspezifische String-API / Bibliothek verwendet.
quelle
"Pasta mit Tomaten und Spinat"
wenn Sie das Wort nicht halbieren möchten
erste Iteration:
acc: 0 / acc + cur.length = 5 / newTitle = ['Pasta'];
zweite Iteration:
acc: 5 / acc + cur.length = 9 / newTitle = ['Pasta', 'with'];
dritte Iteration:
acc: 9 / acc + cur.length = 15 / newTitle = ['Pasta', 'with','omato '];
vierte Iteration:
acc: 15 / acc + cur.length = 18 (Limit gebunden) / newTitle = ['Pasta', 'with','omato '];
Ausgabe: Pasta mit Tomate ...
quelle
Sie können Leerzeichen damit zuschneiden:
quelle
Von @ NT3RP aktualisiert Ich habe festgestellt, dass, wenn die Zeichenfolge beim ersten Mal ein Leerzeichen trifft, dieses Wort gelöscht wird, wodurch Ihre Zeichenfolge ein Wort kürzer wird, als es sein kann. Also habe ich einfach eine if else-Anweisung eingegeben, um zu überprüfen, ob die maxLength nicht auf ein Leerzeichen fällt.
codepen.io
quelle