如何将字符串中每行的前n个字符移至该行末尾而非字符串末尾?
如何将多行字符串的每行前4个字符移至行尾
问题场景
输入的多行字符串fileString示例如下:
1234a6b4ba21ba54f6bde411930b0b1ec6df 3124a6b4ba21ba54f6bde411930b0b1ef248 2134a6b4ba21ba54f6bde411900b89f7dcf3 4123a6b4ba21ba54f6bde411920bbf835b60
期望实现的效果是把每行的前4个字符移到该行末尾,最终结果如下:
a6b4ba21ba54f6bde411930b0b1ec6df1234 a6b4ba21ba54f6bde411930b0b1ef2483124 a6b4ba21ba54f6bde411900b89f7dcf32134 a6b4ba21ba54f6bde411920bbf835b604123
错误尝试
之前用过一段代码,它会把整个字符串的前4个字符移到末尾,达不到逐行处理的效果:
var num = 4 fileString = fileString.substring(num) + fileString.substring(0, num)
这段代码运行后,原字符串会变成:
a6b4ba21ba54f6bde411930b0b1ec6df 3124a6b4ba21ba54f6bde411930b0b1ef248 2134a6b4ba21ba54f6bde411900b89f7dcf3 4123a6b4ba21ba54f6bde411920bbf835b60 1234
正确实现方法
方法一:拆分+逐行处理+拼接
先把多行字符串按换行符拆成单行数组,对每一行单独执行“截取后段+前段”的操作,最后再拼接回字符串:
const num = 4; fileString = fileString.split('\n') .map(line => { // 兼容长度不足4的行,直接返回原内容 return line.length > num ? line.substring(num) + line.substring(0, num) : line; }) .join('\n');
方法二:正则表达式替换
用正则匹配每行开头的4个字符,通过替换逻辑把它们移到行尾:
const num = 4; // gm标记表示全局匹配所有行,且让^匹配每行开头 fileString = fileString.replace(new RegExp(`^(.{${num}})(.*)`, 'gm'), '$2$1');
内容的提问来源于stack exchange,提问作者user20408329
相关产品推荐
相关产品推荐

