Я пробовал несколько способов сделать это, и я не могу понять, почему мой.match всегда возвращает null. Учитывая приведенную ниже строку, как я могу извлечь 04-Jun-2017 в свою собственную переменную?
var str = "I need the only the date 04-Jun-2017\n"
str.replace(/\n/g,' ');
var date = str.match(/^[01][0-9]-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}$/);
alert(date)
Прежде всего, str.replace(/\n/g,' ');
не изменяет str
var, поскольку строки неизменяемы. Затем вам не нужны привязки ^
и $
, поскольку дата находится внутри строки, она не равна самой строке. Кроме того, вам нужно сопоставлять дни от 1
до 31
, но [01][0-9]
только от 00
до 19
.
Вы можете использовать
var str = "I need the only the date 04-Jun-2017\n"
var date = str.match(/\b\d{1,2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-\d{4}\b/i);
if (date) {
console.log(date[0]);
}
Анкеры заменяются границами слов \b
а часть дня изменяется на \d{1,2}
соответствующую любым 1 или 2 цифрам. Модификатор i
сделает регистр шаблона нечувствительным.
Сначала вы должны быть более ясными о своем вопросе. Во-вторых, что может быть ответом
var str = "I need the only the date 04-Jun-2017\n"
var result = str.replace('I need the only the ','');
alert(result);
Посмотрите, как .replace(valueToSearch,valueToReplace)
нуждается в двух параметрах, сначала заменяемый текст, поэтому все, что вы вкладываете внутрь, будет искать внутри строки, второй параметр - это значение, которое оно заменит, поэтому в случае, если вы хотите избавиться от него, просто поместите пустую строку.