簡體   English   中英

JavaScript:使用自動換行格式化文本

[英]JavaScript: Formatting text with word wrap

我有一個記錄器對象,它使用時間戳、發件人格式化日志消息,並將行格式化為最多 80 個字符的長度。

var paddedSender = message.Sender.padStart( 6 );
var string = `=-[ ${message.Timestamp} ][ ${paddedSender} ] `;
var remainingLength = this.CONSOLE_MAX_LENGTH - string.length - 3;

var lines = [];
var numLines = Math.ceil( message.Body.length / remainingLength );
for ( var i = 0, o = 0; i < numLines; i++ , o += remainingLength )
  lines.push( message.Body.substr( o, remainingLength ) );

string += lines.shift().padEnd( remainingLength ) + ' -=';
while ( lines.length > 0 )
  string += '\n'
    + '=-'
    + '-'.repeat( message.Timestamp.length + 4 )
    + '-'.repeat( paddedSender.length + 4 )
    + ` ${lines.shift().padEnd( remainingLength )} `
    + '-=';

return string;

這會產生類似於以下內容的輸出:

================================================================================
=-[ 06/08 11:30:36 ][ SYSTEM ] Initializing...                                -=
=-[ 06/08 11:30:36 ][ SYSTEM ] Logger Initialized                             -=
=-[ 06/08 11:30:37 ][ SYSTEM ] WebService Initialized                         -=
=-[ 06/08 11:30:38 ][ WEBCLI ] API Returned 400 Bad Request(Endpoint: undefin -=
=----------------------------- ed) (Err: Invalid id)                          -=

到目前為止,它按預期運行。 但是,我希望通過在空格之間開始新行而不是在達到字符限制時使其自動換行。

例如,我想要這條消息:

=-[ 06/08 11:30:38 ][ WEBCLI ] API Returned 400 Bad Request(Endpoint: undefin -=
=----------------------------- ed) (Err: Invalid id)                          -=

要像這樣格式化:

=-[ 06/08 11:30:38 ][ WEBCLI ] API Returned 400 Bad Request(Endpoint:         -=
=----------------------------- undefined) (Err: Invalid id)                   -=

我怎樣才能做到這一點?

您可以獲取文本並獲取所需的size並檢查部分字符串末尾的位置是否為空格,然后拆分字符串並將其推送到調整長度的數組。

 var string = 'API Returned 400 Bad Request(Endpoint: undefined) (Err: Invalid id) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.', size = 46, parts = [], start = 0, end; while (start <= string.length) { end = start + size; if (end < string.length) while (string[end] !== ' ') --end; parts.push(string.slice(start, end).padEnd(size, ' ')); start = end + 1; } console.log(parts);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM