Obtenez de l'Expression Regex Avant une Condition

0

La question

Je voulais à la sortie de la suivante basée sur les expressions régulières. Je voulais avoir une sorte de réutilisabilité basé sur le nom de fichier formats

Nom de fichier formats

   export const datas = [
      {
        id: 1,
        name: "CODE_SLOT",
        codePosition: 0,
        codeType: "_",
        slotPosition: 1,
        slotType: "_",
      },
      {
        id: 2,
        name: "CODE-SLOT",
        codePosition: 0,
        codeType: "-",
        slotPosition: 1,
        slotType: "-",
      },
    ];

Code de produit code

export const getProductCode = (code, codePosition, codeType) => {
  return (
    code.replace(/\.[^/.]+$/, "").split(codeType)[codePosition] ||
    code.replace(/\.[^/.]+$/, "").split(codeType)[0] ||
    ""
  );
};



const images = [{
    name: "toys-blue_wide.jpg"
}]

const selectedFileNameFormat = datas[0]

const output = images.map((image) => ({
  productCode: getProductCode(
    image?.name,
    selectedFileNameFormat?.codePosition,
    selectedFileNameFormat?.codeType
  ),
}));

console.log(output)

Sortie attendue pour le Code Produit

productCode: toys-blue

Code pour les machines à sous

export const getSlot = (slot, slotPosition, slotPosition) => {
  return (
    slot.replace(/\.[^/.]+$/, "").split(slotPosition)[slotPosition] ||
    slot.replace(/\.[^/.]+$/, "").split(slotPosition)[0] ||
    ""
  );
};
    const images = [{
    name: "toys-blue_wide.jpg"
}]
const selectedFileNameFormat = datas[0]

const output = images.map((image) => ({
  slotCode: getSlot(
    image?.name,
    selectedFileNameFormat?.codePosition,
    selectedFileNameFormat?.codeType
  ),
}));

Sortie attendue pour le slot

slotCode: wide
ecmascript-6 javascript regex
2021-11-23 03:41:23
1

La meilleure réponse

1

Si je comprends votre question correctement, vous souhaitez analyser/extrait à partir d'une chaîne, c'est à dire "toy-blue_wide.jpg", un productCode le tout avant de l' "_" le caractère, c'est à dire "toy-blue"et un slotCode, tout après l' "_" à l'exclusion de l'extension de fichier. Vous pouvez utiliser une seule REGEX et la capture de ces deux parties dans leurs groupes respectifs.

/^(.*)_(.*)\./

La première parens saisit le code du produit et le deuxième capture la fente de code. À L'Aide De RexExp.le prototype.exec vous pouvez exécuter une recherche sur le nom de chaque fichier et extraire un tableau de correspondances.

const [, productCode, slotCode] = /^(.*)_(.*)\./.exec(name);

Notez également que lors de l'utilisation de la matrice de déstructuration cession nous sommes en sautant le premier élément. C'est parce que le premier élément retourné à partir de .exec est la chaîne de caractères correspondant, alors que les indices 1..n sont capturées groupes.

const images = [{
  name: "toys-blue_wide.jpg"
}];

const codeAndSlotRegex = /^(.*)_(.*)\./;

images.forEach(({ name }) => {
  const [, productCode, slotCode] = /^(.*)_(.*)\./.exec(name);
  console.log({ productCode, slotCode });
});

Mise à jour

Pour permettre de sélectionner dynamiquement le nom du fichier parser je voudrais préciser une REGEX matcher pour chaque format que vous souhaitez analyser.

const fileNameFormats = [
  {
    id: 1,
    name: "Code-Slot",
    matcher: /^(.*)-(.*)\./
  },
  {
    id: 2,
    name: "Code_Slot",
    matcher: /^(.*)_(.*)\./
  }
];

Parcourir le tableau des images et l'utilisation de l'sélectionnés spécifiquement matcher. Fournir une solution de secours tableau de la valeur dans le cas où l'appariement échoue, et par défaut le code et le logement des valeurs.

const output = images.map((image) => {
  const [, productCode = "", contentSlot = ""] = selectedFileNameFormat.matcher.exec(
    image?.name
  ) ?? [];
  return {
    productCode,
    contentSlot
  };
});

Edit get-regex-expression-before-a-condition

2021-11-23 07:35:59

@Joseph je ne sais pas, que d'autres post n'a pas vraiment d'expliquer quoi que ce soit et toutes les codesandbox n'est le choix entre deux options de journal et de l'état local. Je ne suis pas sûr de ce que vous voulez nous faire comprendre d'elle.
Drew Reese

@Joseph Ok, mais je me demande quelles sont les possibilités en moyenne. Si l'utilisateur sélectionne "Code-Logement", ce qui est censé se passer, ce qui fait de sélectionner cette option signifie? Même si l'utilisateur sélectionne "Code_Slot"? Je pensais que vous étiez désireux de choisir un format de nom de fichier à analyser. C'est littéralement aussi simple que juste de fractionnement sur le symbole entre "code" et "sous"?
Drew Reese

@Joseph, je le vois. Doit-je mettre à jour réponse ici, alors?
Drew Reese

Drew Reese

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................