2016-11-29 3 views
2

Ich habe dieses funktionierende Skript, das die Zeile jeweils 79 Zeichen bricht. Ich möchte eine Bedingung hinzufügen, dass es nur die Linie unterbricht, wenn das 79. Zeichen ein Leerzeichen ist, wenn nicht, dann wird es beim nächsten Leerzeichen unterbrochen. (Damit die Wörter nicht kaputt gehen)Break Line jede X-Zeichen, wenn es ein Leerzeichen ist, wenn nicht auf ein Leerzeichen warten

Hier ist die Funktion die ich momentan habe. (Ich weiß nicht, wie diese Bedingung hinzuzufügen, in der Expression)

function myFunction() { 
    var long_string = document.getElementById('textg').innerHTML; 
    document.getElementById('textg').innerHTML = long_string.replace(/(.{79})/g, "$1<br>"); 
} 
+0

JS kann keine Variablen haben, die mit '-' im Namen benannt sind. – Justinas

+1

@ Justinas: Ich nehme an, dass das erste Beispiel Pseudocode ist – Cerbrus

+0

"Warte auf eins"? – usr2564301

Antwort

5

Diese den Trick tun sollten:

var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed aliquet feugiat enim. Nam viverra sapien quis nisi consequat, nec viverra ligula tempus. Pellentesque sed diam id velit malesuada pellentesque. Vivamus nec condimentum purus. Suspendisse purus lacus, elementum non feugiat molestie, volutpat nec nisl. Vivamus mauris eros, pulvinar eu velit vitae, hendrerit venenatis velit. In accumsan nec lacus eget aliquet. Integer ullamcorper accumsan lacinia. Sed eleifend dignissim libero. Aenean sodales imperdiet ipsum, ut vulputate ante accumsan sit amet. Nunc mollis tristique finibus. Donec pellentesque orci nec ante efficitur scelerisque. Cras ullamcorper euismod sem in pretium. Morbi felis turpis, venenatis sit amet erat mattis, consectetur commodo nisi. Aliquam varius ultrices orci eget tristique."; 
 

 
var broken = str.replace(/(.{79}[^ ]*)/g, "$1<br />"); 
 

 
document.getElementById('result').innerHTML = broken;
<pre id="result"></pre>

Die Magie ist in this regex:

/(.{79}[^ ]*)/g

Es captures:

  • 79 Zeichen: .{79} +
  • Alles, was folgt daraus, dass kein Raum ist: [^ ]* +
  • Der hintere Raum .

Das Ersetzen ersetzt dann den aufgenommenen Abschnitt mit "dass" + a Zeilenumbrüchen ("$1<br />")


Beachten Sie, dass diese in den Räumen vor den <br />, in der Zeichenfolge führen:
enim. <br />Nam

Wenn Sie diese loswerden möchten, verschieben Sie den letzten Speicherplatz aus der Erfassungsgruppe in der Regex. Der Raum wird dann verworfen werden:

/(.{79}[^ ]*) /g

+0

genau das habe ich gesucht! Und danke für die guten Erklärungen! Es hilft, diese Regex zu verstehen. Ich bin mit diesen etwas neu. Hast du vielleicht einen Codex über sie? – Ezhno

+2

Sie sind herzlich willkommen! Dies sind einige gute Seiten: http://www.regular-expressions.info/ und https://regex101.com/ – Cerbrus

+1

@Ezhno: Ich aktualisierte die Antwort ein bisschen. Das '+' in der Regex bedeutete, dass es nicht kaputt ging, wenn das 79. Zeichen ein Tempo war. Das ist jetzt behoben. – Cerbrus

-1

einfach überprüfen, ob es mehr als 79 Zeichen ist und nicht weiß Raum, als Set-Flag.

var force = false; // in global scope 

if ((longString == 79 && lastCharacter == ' ') || (lastCharacter == ' ' && force)) { 
    breakline(); 
    force = false; 
} else if (longString > 79 && lastCharacter != ' ') { 
    force = true; 
} 
+0

'Bruchlinie()'? Was ist das? – Cerbrus

Verwandte Themen