Ответ: GREP. Как получить найденную подстроку (выражение) в виде строки?
Во-первых, замены касаются не только формата. Во-вторых, этот алгоритм не совсем корректен: при выполнении поиска подстроки в полной найденной строке неизбежны "лишние" результаты, поскольку при этом не будет учитываться соседство с другими подстроками, которое было задано в рег выражении. А в-третьих, просто удивляет невозможность более простого доступа, который, казалось бы, напрашивается сам собой.
Наверное можно сделать как-то так: в changeTo из метасимволов, обозначающих подстроки сконструировать полную ис комую строку,вставив перед и после каждой подстроки метку из "non-joiner", который не изменит распределения текста. Потом с помощью findGrep с toFind="~j.*~j" получать массив нужных подстрок, делать с ними все, что нужно, а в конце простым changeText() убрать метки.