Отфильтровать массив объектов с помощью RegExp? в Angular 5-9 - PullRequest
0 голосов
/ 09 мая 2020

Как мне фильтровать объекты с помощью RegExp (включая заголовок, адрес электронной почты и имя)

заголовок & имя должно быть только в алфавитном порядке. Электронная почта должна быть действительной

Шаблоны RegExp:

Электронная почта = /[a-zA-Z0-9.-pting{1,}@ [a-zA-Z .-] {2,} [.] {1} [a-zA-Z] {2,} /

Название и имя = / ^ [ A-Za-z] + $ /

если какой-либо один адрес электронной почты недействителен, этот недопустимый адрес электронной почты должен храниться в другой переменной, а другие объекты должны храниться в другой переменной.

внутри JSON, адрес электронной почты первого объекта недействителен, поэтому я хочу сохранить этот объект в другой переменной

items = [
{
    title: "This is title", 
    email: "testtest.com",
    status: "confirmed"
},
{
    title: "This another one", 
    email: "someone@something.com",
    status: "pending"
{    
    title: "Just a random string", 
    email: "me@you.co.uk",
    status: "pending"
{    
]

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

пожалуйста, проверьте этот подход

var items = [
{
    title: "This is title", 
    email: "testtest.com",
    status: "confirmed"
},
{
    title: "This another one", 
    email: "someone@something.com",
    status: "pending"
},
{    
    title: "Just a random string", 
    email: "me@you.co.uk",
    status: "pending"
}    
]

var filtered_not_matching = items.filter(s => !/[a-zA-Z0-9.-]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}/.test(s.email))

console.log(filtered_not_matching)

API .test() выполняет поиск совпадения между RegExp и String.

Найдите следующую статью о сопоставлении регулярных выражений в javascript, вы можете найти несколько API для сопоставления регулярных выражений

https://ultimatecourses.com/blog/understanding-regular-expression-matching-with-test-match-exec-search-and-split

0 голосов
/ 09 мая 2020

Если вы хотите отфильтровать только недействительные электронные письма на основе правила регулярного выражения, вы можете использовать Array.filter() в массиве items и отфильтровать любые объекты, email которых не соответствует регулярному выражению . Вы можете использовать текст или сопоставить для соответствия регулярному выражению.

Вот как вы можете это сделать:

const items = [{
    title: "This is title",
    email: "testtest.com",
    status: "confirmed"
  },
  {
    title: "This another one",
    email: "someone@something.com",
    status: "pending"
  },
  {
    title: "Just a random string",
    email: "me@you.co.uk",
    status: "pending"
  }
];

const emailRegex = new RegExp(/[a-zA-Z0-9.-]{1,}@[a-zA-Z.-]{2,}[.]{1}[a-zA-Z]{2,}/)
const titleRegex = new RegExp('/^[A-Za-z]+$/');

const res = items.filter(({
  title,
  email
}) => !email.match(emailRegex));
console.log(res)

const res2 = items.filter(({
  title,
  email
}) => !emailRegex.test(email));
console.log(res2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...