Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-如何编写递归函数来构建像wordwrap这样的字符串数组?_Javascript_String_Recursion - Fatal编程技术网

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的数组作为输出