Updated answer to address the question body
'1234567'.split('').map((e,i,a) => a[i] + (a[i+1] ?? '')).slice(0,-1);
// Array(6) [ "12", "23", "34", "45", "56", "67" ]
Original answer
Edit: I see now this doesn't answer the problem described in the question body. I'll leave it though, as the problem it solves may well be described by the question title.
Shortest way:
'abcdefg'.split(/(..)/g).filter(s => s);
// Array(4) [ "ab", "cd", "ef", "g" ]
Explanation: split(/(..)/g) splits the string every two characters (kinda), from what I understand the captured group of any two characters (..) acts as a lookahead here (for reasons unbeknownst to me; if anyone has an explanation, contribution to this answer is welcome). This results in Array(7) [ "", "ab", "", "cd", "", "ef", "g" ] so all that's left to do is weed out the empty substrings with filter(s => s).
forloop or array processing method. You can't do this with regex alone