2017-07-25 3 views
-9

Ich versuche, einen regulären Ausdruck zu schreiben, der eine neue Zeile nach etwa 160 Zeichen einfügen wird, aber wenn das 160. Zeichen ist es in der Mitte eines Wortes, bis zum Ende des Wortes, dann schneiden.Ruby - Split Zeichenfolge nach n Zeichen, aber nicht teilen, wenn in der Mitte eines Wortes

Irgendwelche Ideen?

Ich habe dies versucht, und es hat noch nicht funktioniert. Versuche immer noch.

string.gsub(/(.{160})(?=.)/, '\n') 

Diese in Javascript funktioniert, nur nicht ganz sicher, wie es zu bekommen in RoR arbeiten

string.replace(/(.{1,160})(?:\n|$|)/g, "$1 \n") 
+2

Teilen Sie Ihren Versuch? – RSB

+0

Reguläre Ausdrücke können keine Zeilenumbrüche einfügen. – mudasobwa

+0

Vielleicht kein regulärer Ausdruck, vielleicht ein String-Operator? Ich bin neu in RoR, komme aus einem PHP-Hintergrund. – user3882741

Antwort

0

Sie können dies versuchen:

regexp = /(\b.{1,160}[\S]*)\s/ 
res = text.scan(regexp).flatten.join("\n") 
+0

Es gibt ein kleines Problem mit Leerzeichen. Nehmen wir an, die Zeilenlänge sei 8 anstatt 160 und "text =" aaa aaa aaa "'. Das achte Zeichen, das zweite Leerzeichen, befindet sich nicht in der Mitte des Wortes, daher sollte die Zeichenfolge nach dem achten Leerzeichen unterbrochen werden, aber Ihr Code gibt "aaa aaa" zurück. Beachten Sie übrigens, dass '[\ S] *' dasselbe ist wie '\ S *'. –

1

Sie können diese versuchen

string.gsub(/(.{160}\S*)\s*/, "\\1\n") 
Verwandte Themen