Замена одной из двух больших букв подряд
Помогите, пожалуйста, в построении регулярки, если такое вообще возможно. В регулярках могу составлять разные паттерны, но тут своими знаниями не разберусь: мне необходимо определить есть ли в слове две или три идущие подряд заглавные буквы и если они есть, удалить, оставив последнюю из двух или трех заглавных букв. Заглавные буквы могут быть только вначале слова. Например, из слова МММорковь, нужно сделать слово Морковь. Из слова ГГруша - слово Груша. Спасибо!
Ответы (1 шт):
Не смотря на уточнение про аббревиатуры, хотелось всё же какой-то универсальности.
/([^\w]|^)([А-ЯЁ])+(\2(?=[а-яё]))/gm => $1$2
Регулярные выражения в JS имеют некоторые ограничения (например, lookbehind), поэтому выглядят иногда запутанно и громоздко. Ждём, когда дополнят, а пока выкручиваемся, как можем:
let sTxt = `ППревратить МММорковь в Морковь. Из слова ГГруша, сделать слово Груша.
Ни ООО "РогаИКопыта" ни новая райДЕЗ не следуют требованиям СНиП и КЗоТ.
Во времена СССР, ЦПКиО Санкт-ППетербурга присваивается имя С. М. КККККирова.
МВ-печь и МТ-ЛБ - техника.`;
let rExp = /([^\w]|^)([А-ЯЁ])+(\2(?=[а-яё]))/gm;
console.error(sTxt); // Исходный текст
console.info(sTxt.replace(rExp, '$1$2'));