Udhayan Nair
Udhayan Nair

Reputation: 552

How to split a string into an array based on every FOUR commas?

so I'm trying to split a string into an array based on the amount of commas, how do I do that? Say my string is as such;

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

How can i split it so that it returns;

var array = ["abc, def, ghi, jkl,", "mno, pqr, stu, vwx,", "yza"]

Is this even possible?

Right now I'm using var array = string.split(', ');

But this adds the strings into the array based on every single comma.

Any help would be appreciated!

Upvotes: 4

Views: 454

Answers (3)

Abhay Sehgal
Abhay Sehgal

Reputation: 1723

You can use split and reduce also to achieve this :

let array = str.split(", ").reduce((prev, curr, i) => {
      if(i%4 === 0){
         prev.push([]);
      }
      prev[prev.length - 1].push(curr);
      return prev;
   }, [])

Upvotes: 0

adiga
adiga

Reputation: 35222

split the string at ,. Then create a generic chunk function which splits the array passed into chunks of size specified using Array.from()

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)))

Upvotes: 1

CertainPerformance
CertainPerformance

Reputation: 370689

I'd use .match instead of split - match (non commas, followed by a comma or the end of the string) 4 times:

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

  • (?:[^,]+(?:,|$)){1,4} - Repeat, 1 to 4 times:
    • [^,]+ - Non comma characters
    • (?:,|$) - Either a comma, or the end of the string

If you want to make sure the first character is not whitespace, lookahead for \S (a non-whitespace character) at the beginning:

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

Upvotes: 4

Related Questions