JavaScript中的文本对齐函数

JavaScript中的文本对齐函数,javascript,arrays,Javascript,Arrays,我正在构造一个JavaScript函数,它接受一个单行文本字符串和一个长度变量,该变量是预期的对齐宽度(最长的单词永远不会超过这个宽度)。以下是更多的要求: 用空格来填补单词之间的空白 每一行需要包含尽可能多的单词,以适合给定的长度 使用\n(换行符)分隔行(不包括在行长度计数中) 单词之间的间距不能相差超过一个空格 行需要以单词结尾,而不是空格 一条直线上的间距从大到小 最后一行没有对齐(仅限单个间距),并且不能有\n 只有一个单词的字符串不需要空格填充 无需更多的麻烦,以下是我的代码:

我正在构造一个JavaScript函数,它接受一个单行文本字符串和一个长度变量,该变量是预期的对齐宽度(最长的单词永远不会超过这个宽度)。以下是更多的要求:

  • 用空格来填补单词之间的空白
  • 每一行需要包含尽可能多的单词,以适合给定的长度
  • 使用
    \n
    (换行符)分隔行(不包括在行长度计数中)
  • 单词之间的间距不能相差超过一个空格
  • 行需要以单词结尾,而不是空格
  • 一条直线上的间距从大到小
  • 最后一行没有对齐(仅限单个间距),并且不能有
    \n
  • 只有一个单词的字符串不需要空格填充
无需更多的麻烦,以下是我的代码:

var justify = function(str, len) {

    var re = RegExp("(?:\\s|^)(.{1," + len + "})(?=\\s|$)", "g");
    var res = [];
    var finalResult = [];

    while ((m = re.exec(str)) !== null) {
      res.push(m[1]);  
    }

    var lastLine = res.pop();
    for (var i = 0; i < res.length; i++) {
      var lineLength = res[i].length;
      if (lineLength !== len) {
        var toAdd = len - lineLength;
        var indexOf = res[i].indexOf(' ', 0);
        var str2 = res[i];
          if ( indexOf === -1 ) {
            str2;
          }
          while ( indexOf > -1 ) {
            str2 = str2.substring(0, indexOf + 1) + " " + str2.substring(indexOf + 1);
            if ( str2.length < len ) {
              indexOf = str2.indexOf(' ', (indexOf + 1));
            }
            else {
              break;
            }
          }

          finalResult.push(str2);
        }
    }

    finalResult.push(lastLine);

    return finalResult.join('\n');

} 
var justify=函数(str,len){
var re=RegExp(“(?:\\s |^)(.{1,“+len+”})(?=\\s |$),“g”);
var-res=[];
var finalResult=[];
while((m=re.exec(str))!==null){
res.push(m[1]);
}
var lastLine=res.pop();
对于(变量i=0;i-1){
str2=str2.substring(0,indexOf+1)+“”+str2.substring(indexOf+1);
如果(str2.length
我正在使用一个RegExp来切割出长度等于或接近被禁止的行长度(
len
)的字符串,并将每一行作为新数组中的一个元素返回。最后一行通过
pop
从数组中删除,并保存到一个变量中,以备将来在完成的数组中使用。然后,我使用for循环迭代行数组,找出需要添加到行长度中的内容,以使其达到
len
长度。然后,我根据现有的空格(通过.substring方法)拆分每一行,并根据需要向这些空格中添加空格以填充行

不幸的是,我的代码没有通过测试,因为我收到了错误消息,表明总行数低于预期。(即,
行计数不等于44-预期为44,而实际为40

我注意到我的结果也违反了一项代码要求(单词之间的间距不能相差一个以上的空格)。例如,我的一行理由如下(空格用冒号表示)

nisi:::pat:ac.


如何更恰当地分配间距?我认为我需要迭代所有的空格,因为我尝试的迭代实际上并没有按预期工作。我假设一旦解决,行数差异的错误也会消除。感谢您提供的任何提示或帮助。

我想您可能正在寻找以下信息:

var justify = function(str, len) {

  var re = RegExp("(?:\\s|^)(.{1," + len + "})(?=\\s|$)", "g");
  var res = [];
  var finalResult = [];

  while ((m = re.exec(str)) !== null) {
    res.push(m[1]);
  }

  for (var i = 0; i < res.length - 1; i++){    
    if(res[i].indexOf(' ') != -1){  
      while(res[i].length < len){      
        for(var j=0; j < res[i].length-1; j++){
          if(res[i][j] == ' '){
            res[i] = res[i].substring(0, j) + " " + res[i].substring(j);
            if(res[i].length == len) break;
            while(res[i][j] == ' ') j++;
          }
        }
      }      
    }    
    finalResult.push(res[i]);    
  }

  finalResult.push(res[res.length - 1]);

  return finalResult.join('\n');

}
var justify=函数(str,len){
var re=RegExp(“(?:\\s |^)(.{1,“+len+”})(?=\\s |$),“g”);
var-res=[];
var finalResult=[];
while((m=re.exec(str))!==null){
res.push(m[1]);
}
对于(var i=0;i
这并不能回答您的问题,但如果您这样做的目的是为了证明文本的合理性,那么请查看和css属性。