Javascript извлечь регулярное выражение из строки

1

Я пробовал несколько способов сделать это, и я не могу понять, почему мой.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)
Теги:

2 ответа

3
Лучший ответ

Прежде всего, 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 сделает регистр шаблона нечувствительным.

  • 1
    Твой код - именно то, что мне нужно. Слишком честно, я даже не знал о \ b и у меня очень мало опыта работы с Regex. Я скажу, что я понятия не имел, что строки неизменны, как вы сказали? Str.replace (/ \ n / g, ''); определенно удаляет новую строку. Мое собственное решение перед тобой состояло в том, чтобы заменить \ n на "", разделить все на токены с помощью .split (""), затем перебрать и сопоставить, используя мое измученное регулярное выражение Итог, ваш путь намного лучше.
0

Сначала вы должны быть более ясными о своем вопросе. Во-вторых, что может быть ответом

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) нуждается в двух параметрах, сначала заменяемый текст, поэтому все, что вы вкладываете внутрь, будет искать внутри строки, второй параметр - это значение, которое оно заменит, поэтому в случае, если вы хотите избавиться от него, просто поместите пустую строку.

  • 0
    Спасибо за ответ, и вы пишите, я должен был написать это более четко, вместо этого это было на скорую руку. Кроме того, ваш ответ не будет работать для меня, потому что текст, окружающий дату, изменится (я думаю, я не указал это), поэтому должен был идти с ответом RegEx.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню