Heim > Web-Frontend > js-Tutorial > Intelligente String -Abkürzung

Intelligente String -Abkürzung

尊渡假赌尊渡假赌尊渡假赌
Freigeben: 2025-02-24 08:48:14
Original
866 Leute haben es durchsucht

Intelligent String Abbreviation

Kernpunkte

  • Die abbreviate() -Funktion in JavaScript verkürzt die Zeichenfolge intelligent an die angegebene maximale Länge, um sicherzustellen, dass sie nicht in der Mitte des Wortes brechen und unnötige Räume entfernt.
  • Diese Funktion erfordert drei Parameter: die ursprüngliche Eingangszeichenfolge, die maximale Ausgangslänge und ein optionales Suffix, das am Ende der Abkürzung hinzugefügt wurde. Wenn das Suffix nicht definiert ist, lautet der Standard "...", was die Abkürzung angibt.
  • Diese Funktion kann in jedem Szenario verwendet werden, in dem String-Längen begrenzt sein müssen, z. B. die Verarbeitungsformateingabe, das Erstellen benutzerdefinierter Tooltips, das Anzeigen von E-Mail-Themen in webbasierten E-Mail-Listen oder die Vorverarbeitung von Daten, die über AJAX gesendet werden sollen.
  • Die Wirksamkeit dieser Funktion ist, dass sie die Eingabezeichenfolge in ein einzelnes Wort aufteilen und dann so viele Wörter wie möglich rekombinieren kann, um die maximale Länge anzupassen. Es wird auch den Eingang vorbereitet, um überschüssige Räume zu entfernen.

In diesem Artikel wird eine einfache und effiziente JavaScript -Funktion namens abbreviate() eingeführt, deren Hauptfunktion als Name ist: verkürzt die Zeichenfolge intelligent an einer angegebenen Länge. Es stellt sicher, dass es in der Mitte des Wortes nicht abgeschnitten wird und die Zeichenfolge vorbereitet, um überschüssige Räume zu entfernen. Das Folgende ist der Code der abbreviate -Funktion:

function abbreviate(str, max, suffix) {
  if ((str = str.replace(/^\s+|\s+$/g, '').replace(/[\r\n]*\s*[\r\n]+/g, ' ').replace(/[ \t]+/g, ' ')).length <= max) {
    return str;
  }

  var
    abbr = '',
    str = str.split(' '),
    suffix = (typeof suffix !== 'undefined' ? suffix : ' ...'),
    max = (max - suffix.length);

  for (var len = str.length, i = 0; i < len; i++) {
    if ((abbr + str[i]).length <= max) {
      abbr += str[i] + ' ';
    } else {
      break;
    }
  }

  return abbr.replace(/[ ]$/g, '') + suffix;
}
Nach dem Login kopieren
Nach dem Login kopieren

Diese Funktion erfordert drei Parameter: die ursprüngliche Eingangszeichenfolge, die maximale Ausgangslänge und ein optionales Suffix, das am Ende der Abkürzung hinzugefügt wurde. Wenn das Suffix nicht definiert ist, lautet die Standardeinstellung "..." (ein Raum, gefolgt von drei Punkten), eine gemeinsame und leicht erkennbare Abkürzung.

Funktionsverwendung

Diese Funktion kann in jedem Szenario verwendet werden, in dem die Stringlängen begrenzt werden müssen, als intelligentere Alternative zu einfachen substr Ausdrücken. Es gibt viele mögliche Anwendungen, wie z. B. Verarbeitungsformulareingaben, Erstellen benutzerdefinierter Tooltips, Anzeigen von E-Mail-Themen in webbasierten E-Mail-Listen oder Vorbereitungsdaten, die über AJAX gesendet werden sollen. Um die Zeichenfolge beispielsweise auf 100 Zeichen zu beschränken und das Standard -Suffix hinzuzufügen, können wir sie so nennen:

str = abbreviate(str, 100);
Nach dem Login kopieren
Nach dem Login kopieren

Dies entspricht diesem Ausdruck substr:

str = str.substr(0, 96) + " ...";
Nach dem Login kopieren
Nach dem Login kopieren

Aber dies ist ein sehr grober Ansatz, da die Ausgangszeichenfolge häufig in der Mitte des Wortes bricht. Die abbreviate -Funktion ist so konzipiert, dass sie dies nicht tut, sondern die Zeichenfolge vor dem letzten Wort teilt, anstatt sie in der Mitte des Wortes aufzuteilen. Daher ist die durch generierte Ausgangszeichenfolge normalerweise abbreviate() kürzer als die durch angegebene maximale Länge, wird jedoch niemals länger sein als er. Die Funktion berücksichtigt auch die für das Abkürzungssuffix erforderlichen Leerzeichen, dh wenn die angegebene maximale Länge 100 beträgt, das Suffix selbst 4 Zeichen beträgt, können wir nur bis zu 96 Zeichen der Haupteingangszeichenfolge verwenden. Sie können angeben, dass es überhaupt kein Suffix gibt, indem Sie eine leere Zeichenfolge übergeben oder wenn Sie die Tag -Zeichenfolge abkürzen möchten, können Sie sie als HTML -Schließetag definieren. Zum Beispiel die folgende Eingabe:

abbreviate("<p>One two three four five</p>", 15, "");
Nach dem Login kopieren
Nach dem Login kopieren
erzeugt diese Ausgabe:

function abbreviate(str, max, suffix) {
  if ((str = str.replace(/^\s+|\s+$/g, '').replace(/[\r\n]*\s*[\r\n]+/g, ' ').replace(/[ \t]+/g, ' ')).length <= max) {
    return str;
  }

  var
    abbr = '',
    str = str.split(' '),
    suffix = (typeof suffix !== 'undefined' ? suffix : ' ...'),
    max = (max - suffix.length);

  for (var len = str.length, i = 0; i < len; i++) {
    if ((abbr + str[i]).length <= max) {
      abbr += str[i] + ' ';
    } else {
      break;
    }
  }

  return abbr.replace(/[ ]$/g, '') + suffix;
}
Nach dem Login kopieren
Nach dem Login kopieren

Wie die Funktion

funktioniert Der Schlüssel zur Funktion

abbreviate ist die Fähigkeit, die Eingangszeichenfolge in ein einzelnes Wort aufzuteilen und dann so viele Wörter wie möglich zu rekombinieren, um die maximale Länge anzupassen. Um effizienter zu sein, müssen wir sicherstellen, dass die Separatoren zwischen Wörtern vorhersehbar sind. Am einfachsten ist es, interne Räume zu minimieren - Neuleitungen und Registerkarten in Räume umwandeln und dann aufeinanderfolgende Räume reduzieren, damit jeder innere Raum die Blöcke ein Raum werden . Natürlich gibt es andere Möglichkeiten, damit umzugehen - zum Beispiel können wir einen flexibleren regulären Ausdruck für die Segmentierung definieren, der alle verschiedenen Arten von Zeichen berücksichtigt, die wir zwischen Wörtern finden. Es gibt sogar ein Wortgrenze ("B") für reguläre Ausdrücke, sodass wir es auch verwenden können. Aber ich fand die Vorverarbeitung von Raum für sich selbst nützlich, insbesondere bei der Verarbeitung von Benutzereingaben. Die Aufteilung durch die Wortgrenze erzeugt nicht die erwarteten Ergebnisse, da Striche, Punkte, Kommas und die meisten Sonderzeichen tatsächlich als Wortgrenzen angesehen werden. Aber ich denke, es ist unangemessen, Wörter durch Interpunktion zu spalten, es sei denn, die Zeichen werden von Leerzeichen gefolgt, so dass Hyphen -Wörter und Code -Snippets nicht in der Mitte geteilt werden. Die erste Aufgabe der Funktion besteht also darin, die Vorverarbeitung von Raum zu erledigen. Wenn das Ergebnis bereits kürzer ist als das durch angegebene Maximum, können wir sie direkt zurückgeben:

str = abbreviate(str, 100);
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir dies nicht tun, können wir auf Situationen stoßen, in denen Saiten abgekürzt werden, wenn sie nicht abgekürzt werden müssen, z. B.

str = str.substr(0, 96) + " ...";
Nach dem Login kopieren
Nach dem Login kopieren

Wenn es keine erste Bedingung gibt, erhalten wir die Ausgabe der Abkürzung, da der angegebene Maximalwert die Länge des Suffix berücksichtigen muss:

abbreviate("<p>One two three four five</p>", 15, "");
Nach dem Login kopieren
Nach dem Login kopieren

Hinzufügen der ersten Bedingung erzeugt einen nicht modifizierten Ausgang:

<p>One two>
Nach dem Login kopieren

Wenn wir also nicht an diesem Punkt zurückkehren, werden wir weiterhin die abgekürzte Zeichenfolge kompilieren - teilen als die angegebene maximale Länge. Sobald wir das kompilieren, was wir brauchen, können wir die Iteration brechen und dann die verbleibenden Räume vom Ende der Abkürzungszeichenfolge abschneiden, dann das Suffix hinzufügen und schließlich das Ergebnis zurückgeben. Schneiden Sie die verbleibenden Räume vom rechten Ende ab und fügen Sie sie dann mit dem Standardsuffix hinzu, scheint etwas verschwenderisch zu sein, aber dies ermöglicht das Eingeben des Suffix ohne Leerzeichen.

Schlussfolgerung

Dies ist eine einfache, aber intelligente String -Abkürzungsfunktion, die auch die Eingabe vorbereitet, um überschüssige Räume zu entfernen. Nach meiner Erfahrung treten beide Anforderungen normalerweise gleichzeitig auf, weshalb ich diese Funktion so entwickelt habe, dass sie auf diese Weise funktioniert.

(Der FAQ-Teil wird hier aufgrund von Platzbeschränkungen weggelassen. Bei Bedarf kann eine Pseudo-Original-Version des FAQ-Teils separat bereitgestellt werden.)

Das obige ist der detaillierte Inhalt vonIntelligente String -Abkürzung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage