拆分文本以每 n 个字符添加一个新行,以处理空格

Mat*_*ell 5 javascript string split replace

为警报和确认对话框编写文本时的常见问题:在添加换行符之前要键入的字符数。一些浏览器会在某一时刻自动中断,而其他浏览器会在其他时候自动中断。所以你只能猜测了。有用的代码片段是一个 Javascript 函数,它将警报或确认对话框的预期文本和字符长度作为输入,然后返回相同的输入字符串,仅在最接近传入字符长度的空格的位置添加新行字符。这样,话没有中途分解。

示例:
1. 为要用于警报或确认对话框的文本字符串分配一个 var,例如:
var a = "我的狗有跳蚤,敏捷的棕色狐狸跳过懒惰的狗等";
2.通过函数运行文本,例如:
a = breakLines(a); // 默认,每 50 个字符中断一次

a = breakLines(a, 20); // 每隔 20 个字符

换行 通过函数运行后显示 'a' 的值,您将看到在离您指定的字符位置最近的空格字符处指定的每个位置都添加了换行符。例如,如果您指定 20,“a”将转换为以下内容:

'我的狗有跳蚤\n敏捷的棕色狐狸\n跳过懒惰的\n狗等'

对于字符串中的每一行(一行是以换行符结尾的字符串的一部分),该行的两边都被删掉了空格。下面的代码片段使用 jQuery $.trim() 函数来执行此操作,但还有其他方法可以在不使用 jQuery 库的情况下执行此操作,例如使用 regexp。只需根据您想使用的替代方法修改代码即可。

这引出了我的问题:除了按照如下所示的方式做我想做的事情之外,是否有更简单更紧凑的方式来做,例如可以利用正则表达式?有接班人吗?

function breakLines(text, linelength)
{
 var linebreak = '\n';
 var counter = 0;
 var line = '';
 var returntext = '';
 var bMatchFound = false;
 var linelen = 50; // 50 characters per line is default

 if(linelength)
 {
  linelen = linelength;
 }

 if(!text){ return '';}
 if(text.length < linelen+1) { return $.trim(text);}

 while(counter < text.length)
 {
  line = text.substr(counter,linelen);
  bMatchFound = false;
  if (line.length == linelen)
  {
   for(var i=line.length;i > -1;i--)
   {
    if(line.substr(i,1)==' ')
    {
     counter += line.substr(0,i).length;
     line = $.trim(line.substr(0,i)) + linebreak;
     returntext += line;
     bMatchFound = true;
     break;
    }
   }

   if(!bMatchFound)
   {
    counter+=line.length;
    line = $.trim(line) + linebreak;
    returntext += line;
   }
  }
  else
  {
   returntext += $.trim(line);
   break; // We're breaking out of the the while(), not the for()
  }
 }

 return returntext;
}
Run Code Online (Sandbox Code Playgroud)

Vin*_*ult 0

或许 ?

function breadLines( str, len )
{
    var len = len || 50, i, j, lines, count, lineBreak = '\n', out = [];

    if ( str.length < len )
        return str;

    lines = str.split(/\s+/);

    for ( i=0, j=0, count=lines.length; i<count; i++ )
    {
        if ( ( out[j] + lines[i] ).length > len )
            j++, out.push("");

        out[j] += lines[i];
    }

    return out.join(lineBreak);
}
Run Code Online (Sandbox Code Playgroud)