如何按空格、换行符及长度限制拆分字符串?
解决方案:按空格/换行拆分后再分割字符块
这需求我之前处理过,核心就是要优先以空格或换行作为拆分边界,不能让字符块跨边界包含空格对吧?直接用单个正则也能实现,但可读性不如分步处理好,我给你两种方案参考:
方案一:分步处理(推荐,可读性强)
先把原字符串按空格/换行分割成独立的单词/片段,再对每个片段拆分最多4字符的块,最后合并结果:
const s = "Tyrannosaurus Rex"; // 1. 按空格或换行分割,同时过滤掉空字符串(避免连续空格/首尾空格的影响) const wordParts = s.split(/[\s\n]/).filter(Boolean); // 2. 对每个片段拆分成最长4字符的块,再扁平化合并 const resultArr = wordParts.flatMap(part => part.match(/.{1,4}/g) || []); console.log(resultArr); // 输出: ["Tyra", "nnos", "auru", "s", "Rex"]
方案二:单正则实现(简洁但可读性稍弱)
如果追求一行代码搞定,可以用带有正向预查的正则,确保每个匹配块不会跨空格/换行:
const s = "Tyrannosaurus Rex"; const resultArr = s.match(/[^\s\n]{1,4}(?=[\s\n]|$)|[^\s\n]+/g) || []; console.log(resultArr); // 同样输出目标数组
解释下这个正则:
[^\s\n]{1,4}(?=[\s\n]|$):匹配1-4个非空格/换行的字符,且后面跟着空格/换行或者字符串结尾|:或者[^\s\n]+:匹配剩余的不足4字符的片段(其实前面的规则已经覆盖,但加这个更稳妥)
两种方案都能满足你的需求,个人更推荐第一种,后续维护起来更清晰~
内容的提问来源于stack exchange,提问作者Shah Abaz Khan




