This question already has answers here:
How can I insert a character after every n characters in javascript?
                                
                                    (7个答案)
                                
                        
                                5年前关闭。
            
                    
假设我们有以下长字符串:


  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 + joinreplace?)来实现。

什么是最干净/最佳方式?



我的第一个解决方法是:

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');

10-01 09:23
查看更多