Преобразовать полное ФИО в сокращённое

263
26 ноября 2017, 16:06

Как можно преобразовать полное ФИО в краткое?

Например, результатом преобразования строки

Васильев Иван Петрович

будет строка

Васильев И.П.
Answer 1

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

Способ с разбиением строки по пробелам

  • Вызываем метод String::split у строчки, получаем массив длины три
  • Элементы этого массива — строки, можем получить первую букву строки, обратившись по индексу, то есть s[0] это первая буква строки s
  • Конкатенируем нужные строки (используя оператор + либо шаблонные строки)

let source = 'Васильев Иван Петрович'; 
let array = source.split(' '); 
 
// конкатенация 
let result = array[0] + ' ' + array[1][0] + '. ' + array[2][0] + '.'; 
// или, используя шаблонные строки 
// let result = `${array[0]} ${array[1][0]}. ${array[2][0]}.`; 
console.log(result);

Способ с регулярным выражением

  • Используем метод String::replace:

    source.replace(/регулярное_выражение/, 'на_что_заменяем')
    
  • . (точка) означает любой символ

  • + (плюс) означает повторить предыдущий символ один или более раз
  • ( и ) (скобки) означают группы захвата, к тому что внутри скобок можно будет обратиться в замещаеющем выражении как $1, $2 и т. д.

let source = 'Васильев Иван Петрович'; 
let result = source.replace(/(.+) (.).+ (.).+/, '$1 $2. $3.'); 
console.log(result);

READ ALSO
задний фон(body) не покрывает всю страницу на IOS

задний фон(body) не покрывает всю страницу на IOS

Я создал простую страницу используя css flexbox layoutВсе работает хорошо с Android телефонами,а вот на Iphone,при скроле,появляется разрыв,к которому применяется...

218
Что не так с setTimeout?

Что не так с setTimeout?

Нужно вывести окно через 5 секундНе совсем понятно, почему ниже приведенный код не работает:

193