Si regulárny výraz Výraz Pred Podmienkou

0

Otázka

Chcel som, aby výstup nasledujúce založené na regulárny výraz výrazy. Chcel som mať nejaké opätovnú využiteľnosť na základe súboru formáty

Názov súboru formáty

   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: "-",
      },
    ];

Kód produktu kód

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)

Očakávaný Výstup pre Výrobok Kód

productCode: toys-blue

Kód pre slotu

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
  ),
}));

Očakávaný Výstup pre slotu

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

Najlepšiu odpoveď

1

Ak som pochopenie vašu otázku správne, ktorú chcete analyzovať/výpis z reťazca, t. j. "toy-blue_wide.jpg s" productCode všetko pred tým "_" charakter, t. j. "toy-blue"a slotCodevšetko , čo po v "_" okrem prípony. Môžete použiť jeden regulárny výraz a zachytiť tieto dve časti do príslušných skupín.

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

Prvý parens zachytáva kód produktu a druhá zachytáva slot kód. Pomocou RexExp.prototyp.exec môžete spustiť vyhľadávanie nad každé meno súboru a extrakt pole zápasy.

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

Všimnite si tiež, že keď sa používa pole destructuring priradenie sme preskočenie na prvý prvok. Je to preto, lebo prvý prvok, ktorý sa vrátil zo .exec je celý reťazec znakov, uzavreté, keďže indexy 1..n sú zachytené skupiny.

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

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

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

Aktualizácia

Umožňujú dynamicky výber súboru parser by som určiť špecifické regulárny výraz matcher pre každý formát, ktorý chcete analyzovať.

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

Iterovať cez pole obrázky a použiť špeciálne vybrané matcher. Poskytovať núdzový pole hodnotu v prípade, že zodpovedajúce zlyhá, a predvolený kód a slot hodnoty.

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

@Jozef ja neviem, že ďalší príspevok nie je naozaj vysvetliť čokoľvek a všetky codesandbox robí, je vybrať si z dvoch možností a prihlásiť miestnej štátnej. Nie som si istý, čo chcete, aby sme pochopili, z nej.
Drew Reese

@Jozef Ok, ale ja som sa pýtať, čo voľby znamenajú. Ak používateľ vyberie možnosť "Kód-Slot", čo sa má diať ďalej, čo sa vyberiete túto možnosť znamená? Isté v prípade, ak používateľ vyberie možnosť "Code_Slot"? Som si myslel, že si chcú vybrať názov súboru formát analyzovať. Je to doslova ako jednoduché, ako to len rozdelenie na symbol medzi "kód" a "slot"?
Drew Reese

@Joseph teraz vidím. Mám aktualizácia odpoveď tu potom?
Drew Reese

V iných jazykoch

Táto stránka je v iných jazykoch

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