我有一个巨大的字符串(22000+个字符)的编码文本.代码由数字[0-9]和小写字母[az]组成.我需要一个正则表达式在每4个字符后插入一个空格,并在每个四十个字符后插入一个换行符[\n].有任何想法吗?
很多人宁愿用for循环和字符串连接来做这个,但我讨厌那些substring调用.我真的反对使用正则表达式,因为它们不是正确的工具(解析HTML),但我认为在这种情况下使用它很容易.
假设你有字符串
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)
| 归档时间: |
|
| 查看次数: |
7734 次 |
| 最近记录: |