REGEX - 每4个字符后插入一个空格,每40个字符后插入一个换行符

Том*_*раћ 1 regex insert

我有一个巨大的字符串(22000+个字符)的编码文本.代码由数字[0-9]和小写字母[az]组成.我需要一个正则表达式在每4个字符后插入一个空格,并在每个四十个字符后插入一个换行符[\n].有任何想法吗?

Jua*_*des 8

很多人宁愿用for循环和字符串连接来做这个,但我讨厌那些substring调用.我真的反对使用正则表达式,因为它们不是正确的工具(解析HTML),但我认为在这种情况下使用它很容易.

JSFiddle示例

假设你有字符串

var str = "aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnoooo";
Run Code Online (Sandbox Code Playgroud)

并且您希望在每四个字符后插入一个空格,并在40个字符后插入换行符,您可以使用以下代码

str.replace(/.{4}g/, function (value, index){
    return value + (index % 40 == 36? '\n' : ' ');
});
Run Code Online (Sandbox Code Playgroud)

请注意,如果换行符(40)不是空间索引的倍数(4),这将不起作用

我在一个项目中抽象了这个,这是一个简单的方法

/**
 * Adds padding and newlines into a string without whitespace
 * @param {str} str The str to be modified (any whitespace will be stripped)
 * @param {int} spaceEvery number of characters before inserting a space
 * @param {int} wrapeEvery number of spaces before using a newline instead 
 * return {string} The replaced string
 */
function addPadding(str, spaceEvery, wrapEvery) {
    var regex = new RegExp(".{"+spaceEvery+"}", "g"); 
    // Add space every {spaceEvery} chars, newline after {wrapEvery} spaces
    return str.replace(/[\n\s]/g, '').replace(regex, function(value, index) {
        // The index is the group that just finished
        var newlineIndex = spaceEvery * (wrapEvery - 1);
        return value + ((index % (spaceEvery * wrapEvery) === newlineIndex) ? '\n' : ' ');
    });
}
Run Code Online (Sandbox Code Playgroud)