Разбиение строки на последовательность подстрок

Я пытаюсь разбить любую строку на список трехсимвольных подстрок.

Например: abcdefgh разбивается на:

abc , bcd , cde , def , efg , fgh

Итак, я написал следующее регулярное выражение:

"abcd".match(/.{1,3}/g);

но он выводится как abc , d. Как я мог добиться результата, как описано выше?

Это не дубликат. Связанный дубликат требует, чтобы строка разделялась каждые 3 символа. 'abcdefgh' => 'abc, bcd, cde, def, efg, fgh' не разделяет каждые 3 символа

Tom_B 13.09.2018 19:02
0
1
42
1

Ответы 1

Поскольку совпадений не может быть перекрывающихся, вам необходимо использовать что-то, который запрещает механизму регулярных выражений продвигаться и использовать строку.

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

Используйте этот шаблон: (?=([a-z]{3})). Он утверждает, что за текущей позицией следуют три строчные буквы. Поскольку он заключен в опережающий просмотр, он не будет продвигать позади, найденный тремя буквами.

В результате вы получите 6 совпадений, которые будут пустыми, но каждое совпадение будет содержать группа захвата, которое будет содержать три буквы.

Демо

Другие вопросы по теме