[英]JavaScript split string by comma and character count
我有一个包含大约 10,000 个 ids 逗号分隔的字符串,我想用逗号分隔它们,并确保每个字符串中的字符数不超过 1500 个字符。
例如:
var str = "12345, 567789, 435345, 55446444564, 786756, 33322 .... ";
var commaSeperatedSplitArr = str.split(",");
var arrayOfArrays = [];
var limit = 50;
// So, I would like to get my commaSeperatedSplitArr[0].length >= 1500 and <= 1600 characters such that none of the Ids are cropped off
while(commaSeperatedSplitArr.length > 0) {
var splicedCharCount = arrayOfEmails.splice(0, limit)[0].length;
if(splicedCharCount >= 1500 && splicedCharCount <= 1600) {
arrayOfArrays.push(commaSeperatedSplitArr.splice(0, limit));
}
}
实现这一目标的最佳方法是什么? 我试过使用 str.splice(0, limit) 但这只是给了我限制的计数而不是我想要的字符数。
更新:
另外,我们如何使用上述方法申请电子邮件地址列表?
For E.g.: var str = "abc@gmail.com, xyz@help-desk.com, hello@world.com.... "
预期结果: 1)对于 Id:(如果限制为 50 个字符)
arrayOfArrays[0] = "12345, 567789, ... "; (should contain 50 characters or less without any id being cropped off.)
2) 对于电子邮件地址:(如果限制为 50 个字符)
arrayofArrays[0] = "abc@gmail.com, xyz@help-desk.com,..."; (should contain 50 characters or less without any email address being cropped off.)
期待你们的解决方案。 干杯。
尝试以下方法:
var str = "12345, 567789, 435345, 55446444564, 786756, 33322"; var commaSeparatedSplitArr = str.split(", "); var arrayOfArrays = []; var currentArrayCharCount = 0; var currentArray = []; var arrayCharCountLimit = 10; for (var i = 0; i < commaSeparatedSplitArr.length; i++) { var currentId = commaSeparatedSplitArr[i]; if (currentArrayCharCount + currentId.length > arrayCharCountLimit) { arrayOfArrays.push(currentArray); currentArray = []; currentArrayCharCount = 0; if (currentId.length <= arrayCharCountLimit) { currentArray.push(currentId); currentArrayCharCount += currentId.length; } else { console.error("ID: " + currentId + " is too long!"); } } else { currentArray.push(currentId); currentArrayCharCount += currentId.length; } } arrayOfArrays.push(currentArray); console.log(arrayOfArrays);
此外,如果您的字符串中实际上有空格,您可能需要考虑将拆分字符更改为", "
(包括空格),这样 id 就不会在开头都包含空格。
编辑:进行了一些更正并转换为堆栈片段。
使用正则表达式的单行解决方案。
它使用管道更改字符串的第 limit 个字符之前的最后一个逗号,一直这样做直到字符串结束。 然后在管道上分裂。
var str = "12345, 567789, 435345, 55446444564, 786756, 33322, 12345, 567789, 435345, 55446444564, 786756, 33322, 12345, 567789, 435345, 55446444564, 786756, 33322" var limit = 20; var regex = new RegExp(`([^]{1,${limit}})(, |$)`, "g"); var out = str.replace(regex, "|$1").slice(1).split("|") console.log(out.map(l => `"${l}"\\t\\t(size: ${l.length})`).join("\\n"))
这是没有模板文字以支持旧浏览器的示例
var str = "12345, 567789, 435345, 55446444564, 786756, 33322, 12345, 567789, 435345, 55446444564, 786756, 33322, 12345, 567789, 435345, 55446444564, 786756, 33322" var limit = 20; var regex = new RegExp('([^]{1,' + limit + '})(, |$)', "g"); var out = str.replace(regex, "|$1").slice(1).split("|") console.log(out.map(l => '"'+l+'"\\t\\t(size: '+l.length+')').join("\\n"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.