Javascript 限制每行和换行的字符数,同时保留前导空格
我的目标是:Javascript 限制每行和换行的字符数,同时保留前导空格,javascript,substring,word-wrap,Javascript,Substring,Word Wrap,我的目标是: 选择一块文本(在本例中,仅选择一个字符串) 限制每行的字符数 为每行保留前导空格,并在文本换行后重新应用它 我能够正确地限制每行的字符数,但是我在空白处遇到了问题,等等 任何帮助都将不胜感激 一般逻辑 您的字符串已包含所有空格。如果将console.log(newStr)添加到脚本中并查看控制台,您将看到空白已经存在 您可能希望删除所有尾随空格(新行字符开始前的空格)。您可以通过使用regex替换来实现这一点:var newStr=addNewlines(str).toStr
- 选择一块文本(在本例中,仅选择一个字符串)
- 限制每行的字符数
- 为每行保留前导空格,并在文本换行后重新应用它
一般逻辑 您的字符串已包含所有空格。如果将console.log(newStr)添加到脚本中并查看控制台,您将看到空白已经存在 您可能希望删除所有尾随空格(新行字符开始前的空格)。您可以通过使用regex替换来实现这一点:
var newStr=addNewlines(str).toString().replace(/\s+(?=\n)/g,”代码>
此外,由于所有制表符(“\t”)将被识别为仅1个字符,但比其他字符占用更多的空间,因此您可能希望将其替换为3或4个空格。类似于.replace(/\t/g,“”)
另一件需要考虑的事情是之前已经出现的新行。您需要停止在那里计数,并在已经存在的换行符之后启动一个新计数器
在文本区域内显示
var str=`我是一个有新行和空格的字符串。我需要保留前导空格,并在n个字符后将其重新添加到字符串中。
此行有前导空格。TTTTTTRRRR
TTGVGGGJJ。Gyjfry bh JKFRTUJ hhdt iihdrtttg。
这是另一句话。Hjkkl gggdetu jcfgjbfftt。
此行没有前导空格,因此我不需要重新应用任何空格。JJXSRG bjlkdetyhk llhfftt`;
函数addNewlines(str){
var结果=“”;
str=str.replace(/\t/g,“”);
而(str.length>0){
nPos=str.indexOf(“\n”);
len=nPos>0&&nPos<25?nPos+1:25;
结果+=str.substring(0,len)+'\n';
str=str.substring(len);
}
返回结果;
}
var newStr=addNewlines(str).toString().replace(/\s+(?=\n)/g,“”;
document.getElementById(“结果”).value=newStr代码>
有时在处理新算法时,使用两个或多个过程要容易得多。所以你认为它是如何一步一步地工作的,而不是一次完成所有的事情
我有一个有两个过程的实现:第一个过程是连接段落行,第二个过程是执行实际的拆分
我相信有更好的方法,但这是有效的,并得到了充分的评论
我不确定你的ES版本,所以我让它与ES5兼容
//将字符串分成特定大小的块
功能块(str,size){
var chunks=[];
while(str){
push(str.substring(0,size));
str=str.substring(大小);
}
返回块;
}
//删除字符串左侧的所有空格
功能左(str){
而(str.substr(0,1)==“”){
str=str.substr(1);
}
返回str;
}
//重复一个字符n次
功能重复(c,n){
返回数组(n+1).join(c);
}
函数addNewlines(str){
var MAX_COLS=25;//文本上的最大列数
var DEFAULT_LEADING=3;//导致重新应用的默认值
var MIN_LEADING=1;//段落中要考虑的最小间距量
var CR=“\n”;
var结果=“”;
var前导=0;
var chunks=[];
var formattedLines=[];//存储中间行
var startReadingSpaceLine=-1;//段落从哪里开始
变量i,l;//计数器
var lines=str.split(CR);//输入行
//在第一步中,我们加入段落行
对于(i=0;i-1){
//如果我们已经在一个段落上,
//我们不会覆盖国旗
}否则{
//但如果这是一段的第一行,
//我们设置了一个标志,允许将这条线与下一条线连接起来
//如果它也包含标识
startedingspaceline=i;
}
//如果我们在一个段落上,我们不会将这一行添加到数组中,
//首先,我们需要等待,看看段落中是否有更多的行
//我们还使用删除的空格更新数组中的行
直线[i]=l;
继续;
}否则{
//若行中并没有空格,我们将检查是否刚刚完成
//段落
如果(StartReadingSpaceLine>-1){
//如果我们这样做,那么我们需要将前面的行添加到数组中
//注意:如果我们想在行之间留一个空间,我们需要使用
//连接(“”)而不是连接(“”)
var paragraphLines=lines.slice(startedingspaceline,i).join(“”);
//我们添加我们喜欢的空白
段落行=重复(“”,默认_前导)+段落行;
格式化行。推送(段落行);
}
}
格式化行。推送(l);
}
//现在我们再次解析这些行,这次我们将进行分割
//把线分成几段
对于(i=0;ivar str = `i am a string that has new lines and whitespace. I need to preserve the leading whitespace and add it back on after the string has been broken up after n characters.
This line has leading whitespace. Tttttt rrrrrr
ttgvgggjjj. Gyjfry bh jkkfrtuj hhdt iihdrtttg.
Here is another line. Hjkkl gggdetu jcfgjbfftt.
This line has no leading whitespace, so i dont need any reapplied. Jjjxsrg bjlkdetyhk llhfftt`;
function addNewlines(str) {
var result = '';
while(str.length > 0) {
result += str.substring(0, 25) + '<br />';
str = str.substring(25);
}
return result;
}
var newStr = addNewlines(str).toString();
document.getElementById("result").innerHTML = newStr;
i am a string that has ne
w lines and whitespace. I
need to preserve the lea
ding whitespace and add i
t back on after the strin
g has been broken up afte
r n characters.
This line has leading
whitespace. Tttttt rr
rrrr ttgvgggjjj. Gyjf
ry bh jkkfrtuj hhdt i
ihdrtttg. Here is ano
ther line. Hjkkl gggd
etu jcfgjbfftt.
This line has no leading
whitespace, so i dont n
eed any reapplied. Jjjx
srg bjlkdetyhk llhfftt