#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/12. разве мы не требуем 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. Моя точка зрения остается в силе — если вы знаете, что месяцем будет «что бы там ни было», вам не нужно сопоставлять конкретные тексты.