获得Regex表达前一个条件

0

的问题

我想输出以下基础上regex表达方式。 我想有某种重用基于文件的格式

文件的格式

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

代码产品代码

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)

预计输出产品代码

productCode: toys-blue

代码隙

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

预计输出为老虎

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

最好的答案

1

如果我理解你的问题是否正确,你想要分析/解从一串,即"toy-blue_wide.jpg"、 productCode 一切 之前"_" 字符,即 "toy-blue"和一个 slotCode一切 之后"_" 不包括文件的扩展。 你可以用一个单一的REGEX和捕获这两个部分纳入其各自的群体。

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

第一个括号中捕获的产品编码与第二抓住老虎的代码。 使用 RexExp.原型。exec 可以执行一个搜索了每个文件和提取一系列相匹配。

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

还请注意,在使用列解构分配的我们跳过第一个元素。 这是因为,第一件返回 .exec 是完整的字符串匹配,而指标1..n捕获的群体。

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

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

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

更新

以允许的动态选择文件分析器,我愿意指定一个特定的REGEX对每个匹配的格式要分析。

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

迭代的系列图像和使用的具体选择的匹配. 提供一个后备的阵列数值的情况下,匹配失败,和默认代码和槽的价值观。

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

@约瑟夫我不知道,其他员额并没有真正解释的任何和所有codesandbox不是从中选择两种选择和记录本地状态。 我不知道你想要什么我们理解它。
Drew Reese

@约瑟夫好吧,但我要问什么选择的意思。 如果用户选择"的代码-老虎",什么应该接下来会发生什么选择这一选择的意思吗? 同样,如果用户选择"Code_Slot"? 我以为你想选择一个文件的名字的格式分析。 是它确实很简单,只是分裂在符号之间的"编码"和"老虎"?
Drew Reese

@约瑟夫我现在看到的。 我应该更新答案在这里然后呢?
Drew Reese

Drew Reese

其他语言

此页面有其他语言版本

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