Obține Regex Expresie Înainte de o Condiție

0

Problema

Am vrut să-ieșire următoarele bazat pe regex expresii. Am vrut să am un fel de reutilizare bazat pe formate de extensii de nume de fișier

Formate de extensii de nume de fișier

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

Cod pentru codul de produs

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)

Temperatura de Ieșire pentru Codul de Produs

productCode: toys-blue

Codul pentru slot

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

Temperatura de Ieșire pentru slot

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

Cel mai bun răspuns

1

Dacă am înțeles întrebarea dumneavoastră în mod corect, vrei pentru a analiza/extras dintr-un șir de caractere, de exemplu "toy-blue_wide.jpg" o productCode tot înainte de "_" caracter, adică "toy-blue"și o slotCodetotul după ce a "_" cu excepția extensie de fișier. Puteți utiliza un singur REGEX și de a capta aceste două părți în grupurile lor respective.

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

Prima parens surprinde codul de produs și cea de-a doua surprinde slot cod. Folosind RexExp.prototip.exec poți să execute o căutare pe fiecare nume de fișier și de a extrage o serie de meciuri.

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

Observați, de asemenea, că atunci când se utilizează matrice de destructurare misiune sarim peste primul element. Aceasta deoarece primul element întors de la .exec este plin șir de caractere potrivite, întrucât indicii 1..n sunt capturate de grupuri.

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

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

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

Update

Pentru a permite dinamic selectarea fisierului parser aș specifica un anumit REGEX meciuri pentru fiecare format doriți să-l analiza.

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

Repeta de-a lungul serie de imagini și de a folosi în mod special selectate meciuri. Oferă o rezervă valoare matrice în cazul în care de potrivire nu reușește, și implicit codul și slot de valori.

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 nu știu, că alt post nu explică nimic și toate codesandbox nu este de a alege din două opțiuni și jurnal de stat locale. Nu sunt sigur ce vrei sa inteleg din asta.
Drew Reese

@Joseph Ok, dar eu cer ce opțiuni să spun. Dacă utilizatorul selectează "Cod-Slot", ceea ce ar trebui să se întâmple, ceea ce face selectând această opțiune înseamnă? Același lucru și pentru cazul în care utilizatorul selectează "Code_Slot"? Am crezut că ați fost doresc pentru a alege un nume de fișier format pentru a analiza. Este literalmente la fel de simplu ca doar divizare pe simbolul între "codul" și "slot"?
Drew Reese

@Joseph văd acum. Se pot actualiza răspuns aici?
Drew Reese

Drew Reese

În alte limbi

Această pagină este în alte limbi

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