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



我有一个巨大的编码文本字符串(22000+个字符)。代码由数字 [0-9] 和小写字母 [a-z] 组成。我需要一个正则表达式在每 4 个字符后插入一个空格,需要一个正则表达式在每 40 个字符后插入一个换行符 []。有什么想法吗?

许多人更喜欢使用 for 循环和字符串连接来做到这一点,但我讨厌那些substring调用。当正则表达式不是适合这项工作的工具(解析 HTML)时,我真的很反对使用正则表达式,但我认为在这种情况下很容易使用。

JSFiddle 示例

假设你有字符串

var str = "aaaabbbbccccddddeeeeffffgggghhhhiiiijjjjkkkkllllmmmmnnnnoooo";

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

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

请注意,如果换行符 (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(/[ns]/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' : ' ');
    });
}

好吧,正则表达式本身不会插入空格,所以我假设您有一些基于查找正则表达式的任何语言的命令

因此,找到 4 个字符并找到 40 个字符:这在一般的正则表达式中并不漂亮(除非您的特定实现有很好的方法来表达数字)。要查找 4 个字符,请使用

....

因为典型的正则表达式查找器使用最大咀嚼,然后从一个正则表达式的末尾向前搜索并再次最大咀嚼,这会将您的字符串分成 4 个字符的部分。丑陋的部分是,在标准正则表达式中,您必须使用

........................................

找到 40 个字符的 chucks,尽管我会注意到,如果您先运行 4 个字符,则必须运行

..................................................

.... .... .... .... .... .... .... .... .... .... 

以说明您已经放入的空间。

句点可以找到任何字符,但鉴于您只使用 [0-9|a-z],如果您需要确保没有其他内容滑入,您可以使用该正则表达式代替每个句点,我只是避免让它更加粗暴。

正如您可能注意到的,正则表达式有一些限制。看看乔姆斯基的层次结构,真正了解他们的理论局限性。

最新更新