Как разбить строку на три части в JavaScript - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь разбить строку на три части независимо от длины строки с помощью JavaScript. Каждая часть не должна быть той же длины, что и остальные.

Например:

AABC:

  • часть 1: AA
  • часть 2: B
  • часть 3: C

AABBC

  • часть 1: AA
  • часть 2: BB
  • часть 3: C

aheuc

  • часть 1: ах
  • часть 2: ЕС
  • часть 3: с

Привет, мир

  • часть 1: ад
  • часть 2: o wo
  • часть 3: rld

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Если все, что вы хотите сделать, это разбить строку на три части (независимо от шаблонов или чего-либо еще), то приведенное ниже будет работать для вас. *

function splitChunks(string) {
    var regex = RegExp(".{1,"+Math.ceil(string.length/3)+"}", 'g');
    return string.match(regex);
}

Что я делаю, так это создание функции регулярного выражения, которая разбивает строку на куски. Единственная «магия», которую я здесь добавляю, заключается в том, что я устанавливаю длину куска равной длине строки, деленной на 3 (как вы можете видеть в переменной regex.

* Единственная проблема заключается в том, что он будет хорошо работать только для длин строк> 5. Некоторые строки более короткой длины не будут разбиваться на куски по 3, так как не хватает строки, чтобы красиво разделиться на 3 ломти.

Примеры вывода:

> splitChunks("abcdefg");
  (3) ["abc", "def", "g"]

> splitChunks("abcdefghijk");
  (3) ["abcd", "efgh", "ijk"]

> splitChunks("abc");
  (3) ["a", "b", "c"]

> splitChunks("abcd"); // :(
  (2) ["ab", "cd"]
0 голосов
/ 29 октября 2018

Я считаю, что эта функция должна захватить вашу намеченную цель:

function splitStringInThree(string) {
  if (string.length <= 3) return string.split('');
  
  const remainder = string.length % 3;
  const divisor = Math.floor(string.length / 3);
  
  const sep1 = remainder === 2 || remainder === 1 ? 1 : 0;
  const sep2 = remainder === 1 || remainder === 0 ? 0 : 1;
  
  const string1 = string.slice(0, divisor + sep1);
  const string2 = string.slice(divisor + sep1, (divisor * 2) + sep1 + sep2);
  const string3 = string.slice((divisor * 2) + sep1 + sep2);
  
  return [string1, string2, string3];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...