प्राप्त Regex अभिव्यक्ति से पहले एक शर्त

0

सवाल

मैं चाहता था करने के लिए, आउटपुट निम्न के आधार पर regex अभिव्यक्ति है । मैं चाहता था कुछ है करने के लिए की तरह reusability के आधार पर नाम प्रारूपों

फ़ाइल नाम स्वरूप

   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 कैप्चर इन दो भागों में उनके संबंधित समूहों.

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

पहली parens कब्जा उत्पाद कोड और दूसरा कब्जा स्लॉट कोड. का उपयोग कर RexExp.प्रोटोटाइप.exec आप निष्पादित कर सकते हैं एक खोज पर प्रत्येक फ़ाइल नाम और निकालने की एक सरणी से मेल खाता है ।

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

भी सूचना है कि जब का उपयोग कर सरणी destructuring काम हम कर रहे हैं लंघन तत्व है । यह है क्योंकि पहला तत्व से लौटे .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 matcher में से प्रत्येक के लिए आप चाहते हैं प्रारूप पार्स करने के लिए.

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

पुनरावृति की सरणी छवियों का उपयोग करें और विशेष रूप से चयनित matcher. उपलब्ध कराने के एक fallback सरणी मूल्य उस स्थिति में मिलान में विफल रहता है, और डिफ़ॉल्ट कोड और स्लॉट मूल्यों.

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

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में