为每个已知的字符数添加新的行字符的最佳方式

Optimal way to add new line characters for every known number of characters

本文关键字:字符 最佳 方式 添加      更新时间:2023-09-26

假设我们有以下长字符串:

var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus dignissim viverra elementum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor at neque quis euismod. Mauris sed gravida urna. Donec tempor gravida elit, ut elementum lectus tincidunt nec. Donec arcu ligula, aliquet id eros consectetur, malesuada mollis dui. Aliquam egestas ligula non lobortis adipiscing.";

我想在每30个字符之后添加新的行('n)字符。如果第30个字符不是空格,则下一个空格将替换为新行。

str = foo(str, 30);

调用之后,console.log(str)将输出如下内容:

//                           30
// ------------------------- |
> console.log(str);
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Vivamus dignissim
viverra elementum. Vestibulum ante
ipsum primis in faucibus orci
luctus et ultrices posuere cubilia
Curae; Vivamus porttitor at neque
quis euismod. Mauris sed gravida
urna. Donec tempor gravida elit,
ut elementum lectus tincidunt 
nec. Donec arcu ligula, aliquet
id eros consectetur, malesuada 
mollis dui. Aliquam egestas ligula
non lobortis adipiscing."

我知道这应该是可能的与一些循环,但也许这是可能的与一些神奇的正则表达式(RegExp + split + join, replace ?)。

最干净/最优的方式是什么?


我的第一个解决方法是:

var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus dignissim viverra elementum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor at neque quis euismod. Mauris sed gravida urna. Donec tempor gravida elit, ut elementum lectus tincidunt nec. Donec arcu ligula, aliquet id eros consectetur, malesuada mollis dui. Aliquam egestas ligula non lobortis adipiscing.";
const LIMIT = 30;
var newStr = "";
var last = 0;
for (var i = 0; i < str.length; i += (LIMIT - 1)) {
    var next = last + LIMIT;
    if (str[next] !== " ") {
        for (var ii = next; ii < str.length; ++ii) {
            if (str[ii] === " ") {
                next = ii;
                break;
            }
        }
    }
    newStr += str.substring(last, next).trimLeft() + "'n";
    last = next;
}
console.log(newStr);
newStr = str.match(/.{1,30}('s|$)|'S+?('s|$)/g).join(''n');

右边,有一种奇特的方法。

var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus dignissim viverra elementum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus porttitor at neque quis euismod. Mauris sed gravida urna. Donec tempor gravida elit, ut elementum lectus tincidunt nec. Donec arcu ligula, aliquet id eros consectetur, malesuada mollis dui. Aliquam egestas ligula non lobortis adipiscing.";
var foo = function(str, delimiter){
       return str.match(/.{1,30}'W/g).join("'n")
}
str = foo(str, 30);
console.log(str);

EDIT添加了来自其他答案的'join'