Ottenere Regex Espressione Prima di una Condizione

0

Domanda

Volevo uscita basato su espressioni regolari espressioni. Volevo avere qualche tipo di riusabilità basati sul nome del file formati

Filename formati

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

Codice prodotto codice

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)

Previsto in Uscita per il Codice Prodotto

productCode: toys-blue

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

Uscita prevista per slot

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

Migliore risposta

1

Se sono io a capire la tua domanda correttamente, si desidera analizzare/estrarre da una stringa, ad esempio "toy-blue_wide.jpg" un productCode tutto ciò prima che il "_" carattere, cioè "toy-blue"e un slotCodetutto dopo il "_" escludendo l'estensione del file. È possibile utilizzare un singolo REGEX e catturare queste due parti nei rispettivi gruppi.

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

La prima parentesi cattura il codice del prodotto e la seconda cattura il codice dello slot. Utilizzando RexExp.prototipo.exec è possibile eseguire una ricerca su ogni nome di file ed estrarre un array di partite.

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

Si noti inoltre che quando si utilizza la matrice di destrutturazione assegnazione stiamo saltando il primo elemento. Questo perché il primo elemento restituito da .exec è la stringa di caratteri abbinati, mentre gli indici di 1..n sono i gruppi catturati.

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

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

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

Aggiornamento

Per consentire di selezionare dinamicamente il nome del file parser vorrei specificare una REGEX matcher per ogni formato che si desidera analizzare.

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

Scorrere l'array di immagini appositamente selezionate matcher. Fornire una soluzione di ripiego, array, valore, nel caso in cui la corrispondenza non riesce, e il codice di default e i valori slot.

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

@Giuseppe, non so, che altro post in realtà non spiega nulla e tutte le codesandbox non è selezionare una delle due opzioni e registro di stato locale. Io non sono sicuro di quello che vogliono farci capire".
Drew Reese

@Giuseppe Ok, ma mi sto chiedendo quali sono le opzioni media. Se l'utente seleziona "Codice-Slot", che cosa è supposto per accadere, cosa di selezionare l'opzione significa? Stesso per se l'utente seleziona "Code_Slot"? Ho pensato di voler scegliere un formato del nome del file da analizzare. È letteralmente semplice come solo spaccare il simbolo, tra "codice" e "slot"?
Drew Reese

@Giuseppe, ora vedo. Devo aggiornare risposta qui allora?
Drew Reese

Drew Reese

In altre lingue

Questa pagina è in altre lingue

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