Расщепление струны на части, начиная со спины - PullRequest
2 голосов
/ 30 апреля 2019

У меня следующая проблема:

Если у меня есть заданная строка 'abcdefg' Я хочу разбить ее на массив подстрок длиной 3, т. Е. [ 'abc', 'def']

Для этогоЯ использую String.prototype.match ():

'abcdefg'.match(/.{1,3}/g);

Однако, если у меня есть входная строка с длиной, которая не делится на 3 'abcdefgh', результат равен ['abc', 'def', 'gh'], но мне нужнорезультат будет ['ab', 'cde', 'fgh'].

Есть ли элегантный способ для этого?

Ответы [ 3 ]

7 голосов
/ 30 апреля 2019

Вы можете взглянуть позитивно на следующие группы из трех символов.

console.log('abcdefgh'.match(/.{1,3}(?=(.{3})*$)/g));
1 голос
/ 30 апреля 2019

Как насчет цикла for:

  const result = [];

  for(let i = str.length - 1; i > 0; i -= 3)
     result.unshift(str.slice(Math.max(0, i - 3), i));
1 голос
/ 30 апреля 2019

Вы можете сначала reverse() строку, а затем использовать match(), а затем reverse() назад каждую часть, используя map()

const parts = str => [...str].reverse().join('').match(/.{1,3}/g).map(x => [...x].reverse().join('')).reverse();

console.log(parts('abcdefgh'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...