JavaScript实现每2字符后加空格且忽略换行符的问题
解决字符串每两字符加空格时忽略换行符的问题
问题原因
你的代码中/.{2}/g正则表达式的.会匹配包括换行符在内的任意字符,导致换行符被计入分组,从而打乱空格插入的位置。
解决方案
方案1:移除换行符后统一处理
适合不需要保留原换行位置的场景,直接将所有换行符删除后再进行分组:
let str = '23456\n734526754'; // 移除所有换行符 const cleanStr = str.replace(/\n/g, ''); // 每两个字符分组并拼接空格 str = cleanStr.match(/.{2}/g).join(' '); console.log(str); // 输出:23 45 67 34 52 67 54
方案2:保留原换行位置,逐行处理
如果需要保留原有的换行结构,可按换行分割每行后单独处理:
let str = '23456\n734526754'; // 拆分每行 const lines = str.split('\n'); // 对每行进行1-2字符分组(兼容最后一组不足2个字符的情况) const processedLines = lines.map(line => line.match(/.{1,2}/g)?.join(' ') || ''); // 重新拼接带换行的字符串 str = processedLines.join('\n'); console.log(str); // 输出: // 23 45 6 // 73 45 26 75 4
方案3:保留原换行位置并全局连续分组
若需要将整个字符串(忽略换行)连续分组后,再还原原换行位置,可按以下方式处理:
let str = '23456\n734526754'; // 记录原换行在非换行字符中的位置 const newlinePositions = []; let charCount = 0; for (let i = 0; i < str.length; i++) { if (str[i] === '\n') { newlinePositions.push(charCount); } else { charCount++; } } // 移除换行符并分组 const cleanStr = str.replace(/\n/g, ''); let processedStr = cleanStr.match(/.{2}/g).join(' '); // 转换换行位置到处理后的字符串索引,从后往前插入避免索引偏移 newlinePositions.reverse().forEach(pos => { const insertPos = pos + Math.floor(pos / 2); processedStr = processedStr.slice(0, insertPos) + '\n' + processedStr.slice(insertPos); }); console.log(processedStr); // 输出: // 23 45 67 // 34 52 67 54
内容的提问来源于stack exchange,提问作者user10518298
相关产品推荐
相关产品推荐

