मैं एक रेगेक्स करने की कोशिश कर रहा हूँ:

 static regex(version: string) {
    const match = /^([0-9])*\.([0-9])*\.([0-9])*-([0-9])*-(toto)$/.exec(version);
    return parseInt(match[1]) + "." + parseInt(match[2]) + "." + parseInt(match[3]) + "-" + parseInt(match[4]);
}

जब संस्करण है:

  • 1.0.0-7-टोटो, यह मुझे 1.0.0-7 लौटाता है इसलिए यह अच्छा है

लेकिन कब है:

  • 1.0.0-17-टोटो, यह मुझे 1.0.0-7 लौटाता है न कि 1.0.0-17

मेरी समस्या कहाँ है?

धन्यवाद

0
jeremy 23 सितंबर 2020, 11:52

2 जवाब

सबसे बढ़िया उत्तर

जैसा कि पहले ही टिप्पणियों में बताया गया है कि आपका दोहराव कैप्चर समूहों में होना चाहिए।

प्रयास करें:

 static regex(version: string) {
    const match = /^([0-9]*)\.([0-9]*)\.([0-9]*)-([0-9]*)-(toto)$/.exec(version);
    return parseInt(match[1]) + "." + parseInt(match[2]) + "." + parseInt(match[3]) + "-" + parseInt(match[4]);
}
0
Pitto 23 सितंबर 2020, 11:58

\d+ को संख्याओं में पार्स करने का क्या मतलब है, बस उन्हें तुरंत वापस स्ट्रिंग में बदलने के लिए? आप मूलांक भी नहीं बदलते। पूरे पैटर्न के लिए वही। आप इसे अलग करते हैं, बस इसे तुरंत उसी तरह वापस एक साथ रखने के लिए।

और यदि आपकी स्ट्रिंग पैटर्न से मेल नहीं खाती है तो समूहों तक पहुंचने का प्रयास करते समय आपका फ़ंक्शन फेंक देगा।

यहाँ एक सरल संस्करण, imo।

function regex(version) {
  const match = /^\d+\.\d+\.\d+-\d+(?=-toto$)/.exec(version);
  return match && match[0];
}


console.log(regex("1.0.0-7-toto"));
console.log(regex("1.0.0-17-toto"));
console.log(regex("1.0.0-17-abba"));
0
Thomas 23 सितंबर 2020, 12:42