Obtener la Expresión Regex Antes de una Condición

0

Pregunta

Yo quería a la salida de la siguiente basado en expresiones regulares las expresiones. Yo quería tener algún tipo de reutilización basada en formatos de nombre de archivo

Formatos de nombre de archivo

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

Código de producto código de

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)

Resultado esperado para el Código de Producto

productCode: toys-blue

Código de ranura

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

Se espera la Salida de la ranura

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

Mejor respuesta

1

Si entiendo tu pregunta correctamente, se desea analizar, extraer a partir de una cadena, es decir, "toy-blue_wide.jpg", un productCode todo antes de la "_" el carácter, es decir, "toy-blue"y un slotCode, todo después de la "_" excluyendo la extensión de archivo. Usted puede usar una sola EXPRESIÓN regular y la captura de estas dos partes en sus respectivos grupos.

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

El primer paréntesis captura el código del producto y la segunda captura de la ranura de código. El Uso De RexExp.el prototipo.exec puede ejecutar una búsqueda a través de cada nombre de archivo y extraer una serie de partidos.

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

Observe también que cuando se utiliza la desestructuración de la matriz de asignación estamos omitiendo el primer elemento. Esto es debido a que el primer elemento devuelto desde .exec es la cadena de caracteres coincidentes, mientras que los índices 1..n son la captura de grupos.

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

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

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

Actualización

Para permitir seleccionar dinámicamente el nombre de archivo parser me gustaría especificar que una determinada EXPRESIÓN regular comparador para cada formato que desea analizar.

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

Iterar sobre el conjunto de imágenes y el uso de los seleccionados específicamente comparador. Proporcionar una reserva de la matriz de valor en el caso de que la coincidencia de falla, y el código predeterminado y los valores de los slots.

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

@José, no sé, que otro post en realidad no explica nada y todos los codesandbox hace es elegir entre dos opciones de registro y el estado local. No estoy seguro de lo que usted quiere que nosotros para entender de ella.
Drew Reese

@José Ok, pero me estoy preguntando cuáles son las opciones que decir. Si el usuario selecciona "Código de la Ranura", lo que se supone que sucederá a continuación, lo que hace seleccionando la opción de decir? Mismo si el usuario selecciona "Code_Slot"? Pensé que usted quiere elegir un formato de nombre de archivo a analizar. Es, literalmente, es tan simple como dividir el símbolo entre el "código" y "slot"?
Drew Reese

@Joseph veo ahora. He de actualización de la respuesta aquí entonces?
Drew Reese

Drew Reese

En otros idiomas

Esta página está en otros idiomas

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