Typescript/Javascript - Разделить строку, но сохранить шаблон разделения

Скажем, у меня есть строка bbbX1cccY1dddA1Z1.

Я разделил, используя шаблон регулярного выражения, но шаблон разделения исчез. Я хочу сохранить разделенное содержимое на выходе

Неправильный вывод

["bbb", "ccc", "ddd"]

Необходимый результат

["bbb", "X1", "ccc", "Y1", "ddd", "A1", "Z1"]

что-то похожее на этот вопрос Разделить строку на список, но сохранение шаблона разделения


person Nerodemus    schedule 04.07.2021    source источник
comment
Какова ваша схема разделения? Это [A-Z]1 или что-то другое?   -  person Phil    schedule 04.07.2021


Ответы (2)


Предполагая, что ваш шаблон разделителя [A-Z]1, вы можете выбрать любой из этих вариантов.

  1. Используйте комбинированный положительный просмотр вперед и просмотр назад для разделения строк, следующих или предшествующих разделителю.

    str.split(/(?=[A-Z]1)|(?<=[A-Z]1)/)
    

    Обратите внимание, что поддержка просмотра назад в браузере по-прежнему достаточно неоднородна. Не используйте, если вам нужна поддержка Sarafi (MacOS или iOS).

  2. Используйте группу захвата, чтобы включить разделитель и отфильтровать пустые значения.

    str.split(/([A-Z]1)/).filter(s => s.length)
    
person Phil    schedule 04.07.2021
comment
Разве str.split(/([A-Z]\d)/).filter(s => s) не лучше. - person decpk; 04.07.2021
comment
@decpk, поэтому я попросил OP уточнить, какой у них шаблон разделителя. - person Phil; 04.07.2021

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

/(?=[A-Z])|(?<=\d)/

Ниже регулярное выражение разделит строку, если есть CAPITAL LETTER ON RIGHT SIDE ИЛИ number on the left side.

const str = "bbbX1cccY1dddA1Z1";
const result = str.split(/(?=[A-Z])|(?<=\d)/);

console.log(result);

Ниже регулярное выражение будет работать, если в комбинации будет CAPITAL LETTER and a number...

const str = "bbbX1cccY1dddA1Z1";
const result = str.split(/([A-Z]\d)/).filter(s => s);

console.log(result);

person decpk    schedule 04.07.2021
comment
Если в токенах без разделителей появляются какие-либо числа, это не будет работать правильно. - person Phil; 04.07.2021
comment
@Phil Я согласен и обновил ответ. - person decpk; 04.07.2021