Какое регулярное выражение для даты и месяца?

#javascript #regex #file #date

#javascript #регулярное выражение #файл #Дата

Вопрос:

Примеры ввода имени файла:

Выдать файл 31 июля 20.csv

Выдать файл 30 августа 20.csv

Мой RegExp код:

 Yieldsfiles[0-9]{2}sb(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May?|Jun(?:e)?|July?|Aug(?:ust)?|Sept(?:ember)?|Oct(?:ober)?|Nov(?:ember)|Dec(?:ember)?)s[09]{2}.*\.([Cc]{1}[Ss]{1}[Vv]{1})$
  

Комментарии:

1. Символьный класс в конце должен быть [0-9]{2} с тире, вы можете опустить .* после него, а также вы можете исключить {1} из шаблона и границы слова. ^Yieldsfiles[0-9]{2}s(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May?|Jun(?:e)?|July?|Aug(?:ust)?|Sept(?:ember)?|Oct(?:ober)?|Nov(?:ember)|Dec(?:ember)?)s[0-9]{2}.(?:[Cc][Ss][Vv])$ Смотрите regex101.com/r/A7cU55/1

2. разве мы не требуем b перед месяцем

3. Ранее вы сопоставляли символ пробела s .

4. Вам следует потратить немного больше времени на четкую постановку вашего вопроса. Тело должно быть самостоятельным, оно не должно требовать понимания заголовка. Вы также должны предоставить примеры ввода и ожидаемого результата, которые как проходят, так и не проходят ваш тест, плюс то, что идет не так с вашим кодом (желательно, размещенным в виде доступного для выполнения фрагмента в вопросе).

Ответ №1:

Если ваш формат файла настолько жесткий…

  • Литеральная строка Yield file (с конечным пробелом)
  • Дата, которую вы хотите извлечь
  • Литеральная строка .csv

Тогда вам не нужно регулярное выражение. Вам даже не нужно заботиться о строке.

Уверен, вы можете проверить это, например.

 if( !filename.startsWith("Yield file ") || !filename.endsWith(".csv")) {
    throw new Error("Filename doesn't match the expected pattern");
}
  

Но на самом деле все, что вам нужно, это:

 date = filename.substring(
    "Yield file ".length,
    filename.length - ".csv".length
);
  

Комментарии:

1. OP, похоже, также хочет сопоставить названия месяцев, так что /^Yield file dd (Jan|January|Feb|February|...) dd.csv$/ . Операция плохо сформулирована.

2. Привет всем , извините за формулировку ! пятничный ажиотаж! я просто хотел узнать регулярное выражение для названия месяца. таким образом, формат будет примерно таким, как 31 20 июня. я знаю, что для чисел мы можем указать [0-9]{2}, но для текстового названия месяца я не был уверен в!

3. Моя точка зрения остается в силе — если вы знаете, что месяцем будет «что бы там ни было», вам не нужно сопоставлять конкретные тексты.