Да, вы можете захватить код_полу, используя положительный взгляд вперед, используя это регулярное выражение,
(?=(..))(\d{6})(\d{1}[ABDE])(\d{3})\.(\d{3})
Демонстрация регулярных выражений
Это регулярное выражение именованных групп, но оно будет работать только в браузере Chrome
, а именованная группировка захвата будет доступна в ECMAScript 2018 и поддерживается только в Chrome на данный момент.
Эта демонстрация JS будет работать в Chrome, поскольку на данный момент это единственная версия, поддерживающая EcmaScript2018,
const validateMpn = (mpn) => {
const regex = /(?=(?<gender_code>\d\d))(?<style>\d{6})(?<width>\d{1}[ABDE])(?<color_code>\d{3})\.(?<size_code>\d{3})/gi
const match = regex.exec(mpn)
if (!match) {
return null
}
return match.groups
}
const str1 = '1102961D048.075'
const str2 = '1200322A001.085'
const match1 = validateMpn(str1)
const match2 = validateMpn(str2)
console.log(match1)
console.log(match2)