繁体   English   中英

JavaScript 按逗号和字符数拆分字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM