Я пытаюсь построить регулярное выражение из серии меньших регулярных выражений в виде строки или примитива.
Я использую Node v10.15.0.
Вот мои 3 компонента по отдельности
Соответствие месяца: /\b(?<month>\bjan(?:uary)?\b|\bfeb(?:ruary)?\b|\bmar(?:ch)?\b|\bapr(?:il)?\b|\bmay\b|\bjun(?:e)?\b|\bjul(?:y)?\b|\baug(?:ust)?\b|\bsep(?:tember)?\b|\boct(?:ober)?\b|\bnov(?:ember)?\b|\bdec(?:ember)?\b)/i
Соответствие дня: /(?<day>\d{1,2})/i
Соответствие года: /(?<year>20\d\d)/i
Я пытаюсь создать регулярное выражение изкаждый из которых будет выглядеть примерно так:
new RegExp(/\b(?<month>\bjan(?:uary)?\b|\bfeb(?:ruary)?\b|\bmar(?:ch)?\b|\bapr(?:il)?\b|\bmay\b|\bjun(?:e)?\b|\bjul(?:y)?\b|\baug(?:ust)?\b|\bsep(?:tember)?\b|\boct(?:ober)?\b|\bnov(?:ember)?\b|\bdec(?:ember)?\b) (?<day>\d{1,2}), (?<year>20\d\d)/i);
Это будет соответствовать «14 апреля 2018», «25 июня 2019» и т. д. и т. д.
Я сделал несколько попыток построения с помощью:
new RegExp(/my-pattern/i)
new RegExp('my-pattern' + 'my-other-pattern, 'i')
new RegExp(new RegExp('my-pattern', 'i') + new RegExp('other-pattern', 'i')
(это кажется наиболее глупым).
Один странный эффект, который я заметил, был, когда я пытался построить строку.Кроме того, конструктор будет обрезать вывод - посмотрите, как именованная группа «месяц» изменяется ниже:
var z = new RegExp('\b(?<month>\bjan(?:uary)?\b|\bfeb(?:ruary)?\b|\bmar(?:ch)?\b|\bapr(?:il)?\b|\bmay\b|\bjun(?:e)?\b|\bjul(?:y)?\b|\baug(?:ust)?\b|\b
sep(?:tember)?\b|\boct(?:ober)?\b|\bnov(?:ember)?\b|\bdec(?:ember)?\b)' + '(?<day>\d{1,2})', 'i');
undefined
>>> (?<monthjan(?:uary)feb(?:ruary)mar(?:ch)apr(?:il)majun(?:e)jul(?:y)aug(?:ust)sep(?:tember)oct(?:ober)nov(?:ember)dec(?:ember))(?<day>d{1,2})/i
Кто-нибудь может посоветовать лучший подход для этого?В противном случае я, скорее всего, снова и снова буду объявлять совпадения месяцев / дней / лет очень подробными образцами.
Спасибо