Использование регулярных выражений для проверки из 4 слов в массиве идеально подходит - PullRequest
0 голосов
/ 10 ноября 2019

Мне поручили проект создания сайта CV, где пользователь загружает файл .docx, а данные извлекаются из файла и автоматически вводятся в разработанный мной шаблон.

У меня естьЯ смог извлечь файл деталей .docx с помощью JavaScript, а извлеченные детали были сохранены в массиве, чтобы было легче идентифицировать слова при индексации. Например,

[Adeola Emmanuel, adeolaemmanuel@gmail.com, pharmacist, 2 ketu ikorodu lagos, etc].

, где мне нужна помощь, не все резюме, загруженные пользователем, имеют имя, которое идет первым, или электронное письмо, которое идет вторым, но он уверен, что они находятся в пределах 0,6 массива, поэтому я решил написатьфункция, которая поможет с этим, но не работает

var email = email(text.slice(0, 5));

function email(email) {
  var re = /.{1,}@[^.]{1,}/ig;
  if (!re.test(email)) {
    email = text.slice(0, 1);
    return email;
  } else if (re.test(email)) {
    email = text.slice(3, 5);
    return email;
  }
}

1 Ответ

2 голосов
/ 10 ноября 2019

Вы можете использовать метод массива find:

function getEmail(arr) {
    let re = /\S@[^.\s]/;
    return arr.find(str => re.test(str));
}

let text = ["Adeola Emmanuel", "adeolaemmanuel@gmail.com", "pharmacist", "2 ketu ikorodu lagos"];

let email = getEmail(text.slice(0, 5));

console.log(email);

Некоторые замечания:

  • {1,} в регулярных выражениях можно сократить до +
  • Вы на самом деле нене нужно проверять множественные вхождения с помощью +, так как вы уже приняли бы одно вхождение. Таким образом, это также означает, что после «@.
  • » у вас будет все в порядке с одним неточечным символом. Ни один из суффиксов регулярного выражения (ig) не будет использоваться в вашем регулярном выражении.
  • Метод .test должен получить строку в качестве аргумента, а не массив. Поэтому вам нужно передать его, например, email[0].
  • Для полной проверки того, является ли какая-либо строка действительным адресом электронной почты, регулярное выражение будет намного более сложным
  • Когда условие if является ложным, нет необходимости проверять прямо противоположное в блоке else: исключая, что противоположное условие всегда будет истинным при его выполнении.
  • slice массива по-прежнему является массивом, поэтому возвращать text.slice(3, 5); в блоке else не имеет смысла. Вы хотите вернуть строку.
  • Вам необходим цикл для проверки других элементов массива, если у вас нет совпадений и вы не достигли конца массива. Так что нужна некоторая конструкция цикла. Вы можете использовать for, while или любой из методов массива, которые делают такие циклы. find особенно полезен в этом случае.
  • Не присваивайте вашей функции то же имя, что и у другой переменной (email), так как только этой переменной можно присвоить только одно значение (функция, строка или еще что-то еще). Таким образом, в вашем случае вы потеряете определение функции при инициализации var.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...