Получить отфильтрованный массив с помощью Regex

У меня есть массив input следующим образом.

const input = [
  '_rels', 'item1.xml',
  'item2.xml', 'item3.xml',
  'item4.xml', 'item5.xml',
  'item6.xml', 'item7.xml',
  'itemProps1.xml', 'itemProps2.xml',
  'itemProps3.xml', 'itemProps4.xml',
  'itemProps5.xml', 'itemProps6.xml',
  'itemProps7.xml'
]

Массив может включать любую строку.

Я хотел бы отфильтровать массив item{number}.xml, не включая itemProps{number}.xml.

Ожидаемый результат будет следующим:

const output = [
'item1.xml', 'item2.xml', 'item3.xml', 'item4.xml', 'item5.xml', 'item6.xml', 'item7.xml'
]

Почему регулярное выражение? Просто найдите itemProps.

Andreas 14.12.2020 18:54

в массиве может быть много других элементов без префикса item.

wangdev87 14.12.2020 18:55

Затем сохраните все элементы, которые начинаются с item, но не itemProps. По-прежнему не требует регулярного выражения.

Andreas 14.12.2020 18:56

если я отфильтрую элементы, начинающиеся с item, то itemProps1.xml также будут включены в результат, но я просто хочу только item1.xml, item2.xml, ....

wangdev87 14.12.2020 18:58

Вы пропустили часть моего комментария "... но не itemProps"

Andreas 14.12.2020 18:59

могут быть любые элементы, даже itemblablabl.xml, и мне нужно их исключить.

wangdev87 14.12.2020 19:00

Вы явно просите item и itemProps в вопросе. Как мы (я) должны знать, что могут быть другие item* записи? -> "Как сохранить только записи item{Number}.xml из входного массива?"

Andreas 14.12.2020 19:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
7
92
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать методы RegExp.prototype.test() и Array.prototype.filter для получения результата.

 const input = [
  '_rels', 'item1.xml',
  'item2.xml', 'item3.xml',
  'item4.xml', 'item5.xml',
  'item6.xml', 'item7.xml',
  'itemProps1.xml', 'itemProps2.xml',
  'itemProps3.xml', 'itemProps4.xml',
  'itemProps5.xml', 'itemProps6.xml',
  'itemProps7.xml'
];

const res = input.filter(item => /^item\d+\.xml$/i.test(item));

console.info(res);

Вы можете воспользоваться регулярным выражением в сочетании с методом Array.prototype.reduce, подобным этому

const input = [
  '_rels', 'item1.xml',
  'item2.xml', 'item3.xml',
  'item4.xml', 'item5.xml',
  'item6.xml', 'item7.xml',
  'itemProps1.xml', 'itemProps2.xml',
  'itemProps3.xml', 'itemProps4.xml',
  'itemProps5.xml', 'itemProps6.xml',
  'itemProps7.xml'
]
const regExPattern = /itemProps\d+\.xml/
const result = input.reduce((acc, current) => {
  if (regExPattern.test(current) === false){
    return acc.concat(current);
  }
  return acc;
}, []);

console.info(result);

Это просто усложненная версия ответа Саджиба .filter() (и в ней также отсутствует запись _rels)

Andreas 14.12.2020 19:16

Я внес изменения, чтобы принимать только элементы, которые начинаются с item и содержат любое количество цифр, за которыми следует .xml

Yves Kipondo 14.12.2020 19:38

Другие вопросы по теме