Как удалить все символы после указанного слова и перед точкой в ​​строке, используя javascript? - PullRequest
1 голос
/ 08 февраля 2020

У меня есть эта строка:

1_plex_light-blue-striped_imagegroup.jpg?v=1581100432

Иногда это выглядит так:

1_plex_light-blue-striped_imagegroup_d6f347cf-1440-45ef-955d-144ge18d0a00.jpg?v=1581100432

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

  • 1 (порядок в группе изображений)
  • plex (название продукта)
  • светло-голубая полоска (цвет)
  • imagegroup ( позвольте моему коду знать, что изображение является частью группы

Код:

Этот код находится внутри функции, которая срабатывает при нажатии цветовой рамки. Я передаю цвет прямоугольника, по которому щелкнули, а затем слово «_imagegroup» и использую строку, чтобы помочь отфильтровать изображения с выбранным цветом из группы изображений, с которой я начинал.

    var imagesArray = makeProductImagesArray();

    function filterImageByColourAndGroupType(image) {
          return image.masterImagePath.includes(`${colour}_imageset.`);
    }

    var filteredArray = imagesArray.filter(filterImageByColourAndGroupType);

    filteredArray.sort((a, b) => a.masterImagePath.replace(/\D/g,'').localeCompare(b.masterImagePath.replace(/\D/g,'')));

Проблема:

Иногда совпадение не удается, поскольку к пути изображения добавляется случайная строка, такая как "d6f347cf-1440-45ef-955d-144ge18d0a00".

Как я могу убедиться, что мой фильтр возвращает мне только изображения, которые соответствуют этому формату:

light-blue-striped_imagegroup.

Фильтр должен думать, что строка, которая добавлена ​​после "imagegroup", не существует. :

1_plex_light-blue-striped_imagegroup.jpg?v=1581100432

И чтобы полностью игнорировать:

_d6f347cf-1440-45ef-955d-144ge18d0a00

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Вы можете использовать регулярное выражение. Примерно так будет работать:

function filterImageByColourAndGroupType(image) {
  const regex = new RegExp(`[0-9]+_.*_${colour}_imagegroup[_.*]?`);
  return image.masterImagePath.match(regex) != null;
}

Это будет соответствовать 1_plex_light-blue-striped_imagegroup.jpg?v=1581100432 и 1_plex_light-blue-striped_imagegroup_d6f347cf-1440-45ef-955d-144ge18d0a00.jpg?v=1581100432.

Возможно, вам придется немного подкорректировать точное регулярное выражение на основе указанных c ограничения значений (о которых я не знаю и о которых я только догадываюсь), но это должно помочь вам начать.

1 голос
/ 08 февраля 2020

Вы можете использовать Lookbehind assertion для сопоставления символов, которым предшествует группа изображений:

const str = '1_plex_light-blue-striped_imagegroup_d6f347cf-1440-45ef-955d-144ge18d0a00.jpg?v=1581100432';
console.log(str);
const regex = "/(?<=imagegroup).*\./"

const newStr = str.replace(regex, '.');
console.log(newStr)

РЕДАКТИРОВАТЬ: Lookbehind assertion имеет форму (?<=y)x и соответствует «x», только если «x» предшествует «y», чтобы дать простой пример:

const str = 'matchNOT but matchTHIS';

//this will look for anything containing the word 'match', 
//but only if it's preceded by the word 'but'; so 'match' before 'but' will be ignored
// and 'match' after 'but' will be captured.
const newStr = str.match(/(?<=but).*match.*/);

console.log(newStr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...