Оставить знак препинания нетронутым

Задание: Переместите первую букву каждого слова в конец, затем добавьте "ay" в конец слова. Оставьте знаки препинания нетронутыми.

Это мой код! Он работает, однако я не могу оставить знаки препинания нетронутыми, как это сделать. Желательно не сильно меняя исходный код.

function pigIt(str){
  return str.split(" ").map( (a) => a.slice(1) + a[0] + 'ay').join(' ')
}

Пример работы кода:

pigIt('Pig latin is cool'); // igPay atinlay siay oolcay

pigIt('Hello world !'); // elloHay orldway ! То есть, если в предложении нету знаков препинания, то мой код работает, но как учесть знаки препинания?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy
  • \p{L} - совпадает с буквами на любых языках;
  • (\p{L}) - группа (первая) с первой буквой слова;
  • (\p{L}*) - группа (вторая) с остальными буквами слова;
  • g - флаг, который заставляет редактировать все слова. Без него замена будет сделана только раз;
  • u - флаг обработки Unicode, без него выражение \p{L} не работает;
  • $2 - вставляет вторую группу - хвост слова;
  • $1 - вставляет первую группу - первую букву слова.
const pigIt = s => s.replace(/(\p{L})(\p{L}*)/gu, '$2$1ay');
→ Ссылка