为每个已知的字符数添加新的行字符的最佳方式
Optimal way to add new line characters for every known number of characters
假设我们有以下长字符串:
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'
相关文章:
- 在JavaScript中输出转义字符
- 不同浏览器中的空白字符正则表达式行为
- Regex匹配除“”之外的所有字符;.js”;
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 有条件更新d3.js力图中节点的最佳方法
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 使用RegExp查找url中的字符
- 为react组件传递道具的最佳方式
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 让Webpack管理Quirky AMD定义的最佳方式
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 检查另一个字符串 JavaScript 中一个字符串是否有任何字符的最佳方法
- 在 url 中编码特殊字符的最佳方法
- 在 JavaScript 字符串数组中获取相邻字符的最佳方法是什么?
- 屏蔽文本框控件的最佳方式是使用javascript允许字符串值在一对3个字符中
- 为每个已知的字符数添加新的行字符的最佳方式
- 在Javascript中检查一个字符是否为任何书面语言中的元音的最佳方法
- 检查一个字符是否是javascript中的字母数字的最佳方法
- 计算推特的Javascript字符数的最佳方式