Получение из базы ФИО нужных данных JS
Подскажите пожалуйста, нужно из вот такой строки
321 Дата рождения 06 10 20 любой текст Алексей Алексеев Алексеевич
Вытянуть ФИО, знаю нужно список ФИО переать в переменную и регулярками вытянуть как то так:
var name = Str.match(/(Алексей|Андрей|Анатолий и тд)/g)[0]
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Я уже отвечал на похожий вопрос. Всё, что там описано, справедливо и для данного случая.
Чтобы эффективно использовать регулярные выражения, нужно: либо постоянно усложнять (т.е. корректировать и дополнять) сами выражения и алгоритмы, либо жёстко стандартизировать формат входных данных.
Код ниже только для примера (количество строк можно сократить почти вдвое - дополнительно прицепил коррекцию года, для полного и сокращённого формата). Запустите сниппет, разверните, нажмите Enter в верхнем поле:
const aFirstNamesMale = 'Александр,Сергей,Дмитрий,Андрей,Алексей,Максим,Евгений,Владимир,Иван,Михаил'.split(',');
const aFirstNamesFemale = 'Елена,Ольга,Наталья,Екатерина,Анна,Татьяна,Юлия,Анастасия,Ирина,Мария'.split(',');
const aAllNames = aFirstNamesMale.concat(aFirstNamesFemale);
const rEXP = new RegExp(`(${aAllNames.join('|')})\\s+([а-яё-]+)\\s+([а-яё]+)`, 'i');
const sCurrYear = new Date().getFullYear().toString().substring(2);
let aSTR, aBirth, aFullName;
input.addEventListener('input', function() {
output.value = '';
aSTR = this.value.trim().split('\n');
aSTR.forEach(function(str) {
aBirth = str.match(/(\d\d)\s+(\d\d)\s+(\d{2,4})/);
aBirth[3] = (aBirth[3].length == 2) ? `${(+aBirth[3] <= +sCurrYear) ? '20' : '19'}${aBirth[3]}` : aBirth[3];
aBirth.splice(0, 1);
aFullName = str.match(rEXP);
output.value += `Ф.: ${aFullName[2]}\nИ.: ${aFullName[1]}\nО.: ${aFullName[3]}\nДата рождения: ${aBirth.join(' ')}г.\n\n`;
});
});
body{display:flex;flex-flow:column nowrap;justify-content:space-around;align-items:center;height:100vh;margin:0}textarea{height:40%;width:90%}
<textarea id="input">321 Дата рождения 06 10 87 любой текст Алексей Алексеев Алексеевич
322 Дата рождения 06 10 20 56 ещё любой текст Татьяна Посеева Сергеевна
34 Дата рождения 06 11 1852 1222 ололо 1212 Дмитрий Мамин-Сибиряк Наркисович
387 Дата рождения 06 10 20 5656 любой текст Наталья Мунн Ивановна
4281 Дата рождения 22 07 1939 любой текст Евгений Новичков Михайлович</textarea>
<textarea id="output"></textarea>