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