Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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
Regex/JavaScript:将字符串拆分为每行最多个字符,并向后查找n个字符以查找可能的空白?_Javascript_Regex_Typescript - Fatal编程技术网

Regex/JavaScript:将字符串拆分为每行最多个字符,并向后查找n个字符以查找可能的空白?

Regex/JavaScript:将字符串拆分为每行最多个字符,并向后查找n个字符以查找可能的空白?,javascript,regex,typescript,Javascript,Regex,Typescript,这是一个类似的问题,然而,与我基于标题所期望的相反,如果只有一个长单词没有任何空格,那么这个解决方案就不起作用 所以我需要一个正则表达式,如果需要的话,它可以将一个字符串拆分为多行,每行最多可以有个字符,如果找到,向后看n个字符是否有可能出现空格中断,否则是最大长度 编辑1:例如,最大行长为30个字符,反向空白查找为15个字符: Loremip Sumis对印刷和排版行业进行了简要总结 这个句子的第一个单词有32个字符。因此,输出应为: Loremipsumissimplydummytextof

这是一个类似的问题,然而,与我基于标题所期望的相反,如果只有一个长单词没有任何空格,那么这个解决方案就不起作用

所以我需要一个正则表达式,如果需要的话,它可以将一个字符串拆分为多行,每行最多可以有个字符,如果找到,向后看n个字符是否有可能出现空格中断,否则是最大长度

编辑1:例如,最大行长为30个字符,反向空白查找为15个字符:

Loremip Sumis对印刷和排版行业进行了简要总结

这个句子的第一个单词有32个字符。因此,输出应为:

Loremipsumissimplydummytextoft  # Line has length of 30 char
he printing and typesetting     # Cut before the word at otherwise 30 char
industry.
所以第一个单词应该在第30个字符后强制剪切,因为没有空格

剩下的字符串长度为28或29,在单词“industry”之前加上破折号,因此在第30个字符处有一个单词,因此解决方案会查找15个字符范围内的前一个空格。这条线在“工业”一词之前就被打破了

编辑2:文本的第二个示例:

Loremip Sumis对印刷和排版行业进行了简要总结。Loremipsum只是印刷和排版行业的傻瓜文本。Loremip Sumis对印刷和排版行业进行了简要总结。Loremipsum只是印刷和排版行业的傻瓜文本

应输出:

LoremipSumismplyDummytextoft 他喜欢印刷和排版 工业洛雷米普苏米斯很简单 Dummy打印和打印文本 排版业。 LoremipSumismplyDummytextoft 他喜欢印刷和排版 工业洛雷米普苏米斯很简单 Dummy打印和打印文本 排版业。 此正则表达式的用例是将长字符串格式化为可读文本,并强制执行最大行长,行以字符而不是空格开头

可选要求:在首次发布后,我在编辑1中添加了该示例,我还添加了一个可选要求,即在下一行的开头添加一个破折号“-”,如果一个单词是以最大行长度剪切的。我现在从示例中删除它,并将其作为单独的可选要求添加到这里

因此,一个可选要求是:如果一行在单词中间以最大长度断开,而不是在空白处断开,那么破折号应该附加在该行的末尾,而不是下一行的开头,正如我最初描述的那样

Loremipsumissimplydummytextoft-  # Line length 30+1 char with an appended a dash
he printing and typesetting     # Cut before the word at otherwise 30 char
industry.
最后答覆:

\S[\S\S]{1,30}$|\S[\S\S]{1,29}?:\S+|\S{30}

演变:

[\s\s]{1,15}\S |\S{15,} 您只需在链接中使用“or”语句修改答案,该语句添加了您的附加要求:|\S{15,}

响应您的编辑,以下是我修改的正则表达式: [\s\s]{1,15}\S |\S{15} 你可以用30或你选择的字符截断替换15

根据您的进一步澄清进行调整: \S[\S\S]{1,14}?:\S*|\S{15} 现在字符串必须以无空格开头,并且它匹配,但不捕获前15个字符后的额外空格。同样,您需要将15和14更改为您想要的长度

\S[\S\S]{1,30}$|\S[\S\S]{1,29}?:\S+|\S{30} 在开头的multiple'or'语句中添加另一个条件,如果字符串以无空格字符结尾,则捕获字符串的结尾。如果它以空格字符结尾,则'or'语句的第二部分将捕获它。 最后答覆:

\S[\S\S]{1,30}$|\S[\S\S]{1,29}?:\S+|\S{30}

演变:

[\s\s]{1,15}\S |\S{15,} 您只需在链接中使用“or”语句修改答案,该语句添加了您的附加要求:|\S{15,}

响应您的编辑,以下是我修改的正则表达式: [\s\s]{1,15}\S |\S{15} 你可以用30或你选择的字符截断替换15

根据您的进一步澄清进行调整: \S[\S\S]{1,14}?:\S*|\S{15} 现在字符串必须以无空格开头,并且它匹配,但不捕获前15个字符后的额外空格。同样,您需要将15和14更改为您想要的长度

\S[\S\S]{1,30}$|\S[\S\S]{1,29}?:\S+|\S{30} 在开头的multiple'or'语句中添加另一个条件,如果字符串以无空格字符结尾,则捕获字符串的结尾。如果它以空格字符结尾,则'or'语句的第二部分将捕获它。 你可以用

var s=印刷和排版行业的LOREMIPSUMISSIMPLYDUMMYTEXT。Loremipsum只是印刷和排版行业的傻瓜文本。Loremip Sumis对印刷和排版行业进行了简要总结。这只是印刷和排版行业的拙劣文字。; var regex=/\s*?:\s{30}|[\s\s]{1,30}\S/g; console.log s、 replaceregex,函数$0,$1,$2{返回$1?$1+-\n:$2+\n;} 你可以用

var s=印刷和排版行业的LOREMIPSUMISSIMPLYDUMMYTEXT。洛勒姆 ipsumis只是印刷和排版行业的虚拟文本。Loremip Sumis对印刷和排版行业进行了简要总结。这只是印刷和排版行业的拙劣文字。; var regex=/\s*?:\s{30}|[\s\s]{1,30}\S/g; console.log s、 replaceregex,函数$0,$1,$2{返回$1?$1+-\n:$2+\n;}
你是说你需要像[\s\s]{15,}这样的东西吗\s你能提供一个例子吗?Wiktor,不完全是因为正则表达式不强制一行的最大长度。我将为这个问题添加一些例子。试试s.replace/\s{30}|[\s\s]{1,30}\S/g,$&\n'或,S.replace/\S{30}\S*[\S\S]{0,30}\S/g,$1$2\n'你是说你需要像[\S\S]{15,}这样的东西吗\s你能提供一个例子吗?Wiktor,不完全是因为正则表达式不强制一行的最大长度。我将为这个问题添加一些例子。试试s.replace/\s{30}|[\s\s]{1,30}\S/g,$&\n'或,S.replace/\S{30}\S*[\S\S]{0,30}\S/g,$1$2\n“其他问题的要求不同,海报接受了一个答案,如果行不包含任何空格,则该答案不强制执行行的最大长度。这里是您建议的正则表达式的演示:该链接还显示您建议的正则表达式的第一行长度为32,而不是删除32个字符长的第一个单词?您编辑了您的问题并添加了更多要求。难怪我的答案不再有效了!“切字后破折号”要求是可选的。最大行长度始终是一个要求…我只添加了一个示例。我也尝试使用{1,12},但它仍然输出相同长度的所有行。不管怎样,你的工作很好!Wiktor在一小时前的“其他评论”帖子中也找到了一个可行的解决方案,但他没有将此作为答案发布,所以我不确定你们中的哪一位得到了被接受的答案。另一个问题的要求是不同的,海报接受了一个答案,如果行不包含任何空格,则不强制执行行的最大长度。这里是您建议的正则表达式的演示:该链接还显示您建议的正则表达式的第一行长度为32,而不是删除32个字符长的第一个单词?您编辑了您的问题并添加了更多要求。难怪我的答案不再有效了!“切字后破折号”要求是可选的。最大行长度始终是一个要求…我只添加了一个示例。我也尝试使用{1,12},但它仍然输出相同长度的所有行。不管怎样,你的工作很好!Wiktor在大约一小时前的“其他评论”线程中也找到了一个可行的解决方案,但他还没有将其作为答案发布,因此我不确定你们中的哪一位得到了公认的答案。@ux.engineer如果使用String.raw,则不需要将反斜杠加倍。@ux.engineer如果使用String.raw,则不需要将反斜杠加倍。