如何基于每四个逗号将字符串拆分为数组?

4

我想基于逗号数量将字符串拆分成一个数组,应该如何做?比如我的字符串如下:

var string = "abc, def, ghi, jkl, mno, pqr, stu, vwx, yza";

我该如何拆分它以返回;
var array = ["abc, def, ghi, jkl,", "mno, pqr, stu, vwx,", "yza"]

这可行吗?

目前我使用的是var array = string.split(', ');

但是这样会根据每个逗号将字符串添加到数组中。

任何帮助都将不胜感激!

3个回答

4
我会使用.match而非split——匹配(非逗号,后跟逗号或字符串结尾)4次:

var string = "abc, def, ghi, jkl, mno, pqr, stu, vwx, yza";
const result = string.match(/(?:[^,]+(?:,|$)){1,4}/g);
console.log(result);

  • (?:[^,]+(?:,|$)){1,4} - 重复1至4次:
    • [^,]+ - 非逗号字符
    • (?:,|$) - 要么是逗号,要么是字符串结尾

如果您想确保第一个字符不是空格,请在开头使用前瞻\S (非空格字符):

var string = "abc, def, ghi, jkl, mno, pqr, stu, vwx, yza";
const result = string.match(/(?=\S)(?:[^,]+(?:,|$)){1,4}/g);
console.log(result);


1
嘿,感谢您的快速回复。我刚刚测试了一下,发现一个问题,只有第一个实例显示数组中的4个对象,之后每个数组只显示3个对象。嗯。 - Udhayan Nair
1
明白了!现在它完美地运行了!非常感谢你的帮助 :D - Udhayan Nair
@showdev 是的,没错,它很好用!这就是我正在寻找的解决方案。 - Udhayan Nair
1
糟糕,我的意思是让它变成["abc. def. ghi, jki", "mno, pqr, stu, vwx", "aaa, aaa, aaa, aaa"],这样答案就正确了。让我编辑一下我的帖子。 - Udhayan Nair
1
@symlink 是的,+ 是贪婪的。如果使用 +? 懒惰模式,它只会重复尽可能少的次数,仅匹配所需的模式。 - CertainPerformance
显示剩余10条评论

1

split函数会在,处将字符串分割。然后创建一个通用的chunk函数,使用Array.from()将传入的数组按指定的size分成块。

const str = "abc, def, ghi, jkl, mno, pqr, stu, vwx, yza",
      splits = str.split(/,\s*/),
      chunk = (arr, size) => Array.from({ length: Math.ceil(arr.length / size) },
                              (_, i) => arr.slice(i * size, (i + 1) * size))

console.log(JSON.stringify(chunk(splits, 4)))
console.log(JSON.stringify(chunk(splits, 3)))


0
你也可以使用 split 和 reduce 来实现这个功能:
let array = str.split(", ").reduce((prev, curr, i) => {
      if(i%4 === 0){
         prev.push([]);
      }
      prev[prev.length - 1].push(curr);
      return prev;
   }, [])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接