JavaScript заменить строку после сопоставления строки

1

Я ожидал найти ответ на типичную проблему с регулярными выражениями.

  • Найти данную строку
  • Измените что-нибудь на этой линии

Многие примеры использования RegEx replace предполагают, что вы знаете шаблон, который хотите заменить. Отлично подходит для обучения, но не является типичным (ИМО). См. Школы w3 и MDN. Если он находится на странице MDN, укажите его.

В моей последней проблеме у меня есть html файл с идентификаторами uniq в строке, поэтому я могу выполнить эту простую замену. Синтаксис строк, которые мне нужно изменить, показаны ниже. Я могу поместить в файл уникальную строку, чтобы найти нужную строку для обновления.

<span id="lastModified">2018-10-26</span>
<span id="builtBy">Pat</span>

Мне нужно найти строку с id="lastModified" и изменить дату.

Мне нужно найти строку с id="builtBy" и изменить дату.

Я попробовал несколько разных вещей. Один

var res = str.replace(/id="lastModified".*>(.*)<.span>/, newDate );

Я думал, что по умолчанию может быть изменение данных, сопоставленных в parens (нет, это не работает). См. Пример кода JSFiddle из того, что я пытался, который не работал.

ПРИМЕЧАНИЕ. В моем случае я пытаюсь понять это, потому что для простой замены строки с использованием gulp-replace, но это действительно проблема соответствия шаблону javascript и замены, поэтому я не привожу gulp-replace в этот вопрос, кроме как упоминать об этом,

ПРИМЕЧАНИЕ. В моем случае этот код не выполняется в браузере, поэтому типичная манипуляция DOM не будет работать.

Другие вопросы, которые я нашел (но не ответили на мой вопрос), были следующими:

  • 3
    В общем, лучше использовать обход DOM, когда это возможно, вместо регулярных выражений.
  • 0
    Также, если вы хотите использовать регулярное выражение, передайте регулярное выражение в .replace , а не в строку
Показать ещё 5 комментариев
Теги:

1 ответ

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

Вы можете использовать это регулярное выражение для соответствия вашей первой строке:

/(<span id="lastModified">)(.*?)(</span>)/

Он в основном соответствует буквально тексту и фиксирует его в трех группах, который затем используется в шаблоне замены, который может быть:

$12018-10-26$3

Сначала он заменяет $1 (первая согласованная группа), затем ваша дата (которую вы хотите получить из переменной) и, наконец, $3 которая является конечным диапазоном.

  • 0
    Спасибо @Poul Bak, это ответ, который я придумал. Итак, окончательный код: var res = str.replace(/(<span id="lastModified">)(.*?)(</span>)/, '$12018-1026$3');

Ещё вопросы

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