Javascript-如何编写递归函数来构建像wordwrap这样的字符串数组?
我需要逐行构建一个字符串数组。它将像文字包装 我将输入如下文本:Javascript-如何编写递归函数来构建像wordwrap这样的字符串数组?,javascript,string,recursion,Javascript,String,Recursion,我需要逐行构建一个字符串数组。它将像文字包装 我将输入如下文本: var inputString = 'There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration'; 我需要数组中的每一行最多38个字符。我不想在中间分裂任何单词,所以如果这38个字符在一个单词的中间,那么回到最近的空格字符。 期望输出: var output =
var inputString = 'There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration';
我需要数组中的每一行最多38个字符。我不想在中间分裂任何单词,所以如果这38个字符在一个单词的中间,那么回到最近的空格字符。
期望输出:
var output = [
'There are many variations of passages',
'of Lorem Ipsum available, but the',
'majority have suffered alteration'
];
输出不正确:
'There are many variations of passages '
'of Lorem Ipsum available, but the majo'
'rity have suffered alteration.'
我已尝试将输入文本按空格字符拆分,结果如下:
var splitInput = [
'There',
'are',
'many'
...
]
function conc(arguments){
if (arguments.length === 0)
return "";
else
return arguments.shift() + conc(arguments);
}
我不知道如何检查参数总数是否为38个或更多,如果是,如何回溯。您可以使用string.prototype.match()来执行此操作
var-inputString='Lorem Ipsum的段落有很多变化,但大多数都发生了变化';
让result=inputString.match(/\b.{1,38}\b/g);
控制台日志(结果)代码>您可以使用string.prototype.match()来完成此操作
var-inputString='Lorem Ipsum的段落有很多变化,但大多数都发生了变化';
让result=inputString.match(/\b.{1,38}\b/g);
控制台日志(结果)
您可以在javascript中使用regex
表示长度38
并拆分字符串
var-inputString='Lorem Ipsum的段落有很多变化,但大多数都发生了变化';
var result=inputString.replace(/.{38}\S*\S+/g,“$&@”).split(/\S+@/);
控制台日志(结果)
您可以在javascript中使用regex
表示长度38
并拆分字符串
var-inputString='Lorem Ipsum的段落有很多变化,但大多数都发生了变化';
var result=inputString.replace(/.{38}\S*\S+/g,“$&@”).split(/\S+@/);
控制台日志(结果)代码>无需使用递归即可完成:
var inputString = 'There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration';
var splitted = inputString.split(" ");
var output = [""];
var i = 0;
splitted.forEach(word => {
var line = output[i] + " " + word;
if (line.length <= 38) {
output[i] = line;
} else {
i++;
output[i] = word;
}
});
console.log("Output:", output);
var-inputString='Lorem Ipsum的段落有很多变化,但大多数都发生了变化';
var splitted=inputString.split(“”);
变量输出=[“”];
var i=0;
拆分的.forEach(word=>{
变量行=输出[i]+“”+字;
如果(line.length可以在不使用递归的情况下完成:
var inputString = 'There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration';
var splitted = inputString.split(" ");
var output = [""];
var i = 0;
splitted.forEach(word => {
var line = output[i] + " " + word;
if (line.length <= 38) {
output[i] = line;
} else {
i++;
output[i] = word;
}
});
console.log("Output:", output);
var-inputString='Lorem Ipsum的段落有很多变化,但大多数都发生了变化';
var splitted=inputString.split(“”);
变量输出=[“”];
var i=0;
拆分的.forEach(word=>{
变量行=输出[i]+“”+字;
如果(line.length只是一个注释:\b
不支持Unicode,如果文本包含非ASCII字母,这些单词可能仍然会被分成两半。这是一个很好的答案,但最后一项中的空字符串不是必需的。更新了答案,使其至少匹配1个字符。如果出现第一个单词为38个字符的边缘情况,会发生什么情况?It将有一个长度为1的数组作为输出。请注意:\b
不支持Unicode,如果文本包含非ASCII字母,单词可能仍会被分成两半。这是一个很好的答案,但不需要最后一项中的空字符串。请更新答案,使其至少匹配1个字符。如果出现边缘大小写w,会发生什么情况这里的第一个字是38个字符?它将有一个长度为1的数组作为输出