Проверьте этот рабочий пример: https://repl.it/repls/BlackJuicyCommands
Прежде всего вам нужно прочитать файл с помощью fs.readFile()
и проанализировать Buffer
до string
.
Теперь выПолучив доступ к тексту файла, необходимо заменить каждый путь к изображению новым путем к изображению.Один из способов его получения - регулярное выражение .Вы можете, например, поискать ](ANY_IMAGE_PATH.ANY_IMAGE_EXTENSION
.Мы заинтересованы только в замене детали ANY_IMAGE_PATH
.
Примером регулярного выражения может быть (это можно улучшить!) (Смотрите его в действии здесь: https://regex101.com/r/xRioBq/1):
const regex = /\]\((.+)(?=(\.(svg|gif|png|jpe?g)))/g
Это будет искать буквальный ]
с последующимлитерал (
, за которым следует любая последовательность (то есть .+
), пока не будет найден литерал .
, за которым следуют либо svg
, gif
, png
или jpeg
/ jpg
. g
после того, как регулярное выражение необходимо для соответствия всем вхождениям, а не только первому.
Javascript / node (<версия 9) <a href="/573397/javascript-otritsatelnyi-vzglyad-za-ekvivalentom"> не поддерживает lookbehind . Я использовал регулярное выражение, которое включает в себя](
до пути к изображению, а затем отфильтровывает его позже (или вы можете использовать более сложное регулярное выражение).
(.+)
захватывает путь к изображению как группу. Затем вы можете использовать функцию заменыстроки. Функция replace принимает регулярное выражение в качестве первого аргумента. Вторым аргументом может быть функция, которая получает в качестве первого аргумента полное совпадение (в данном случае ](image_path_without_extension
и в качестве следующих аргументов любая захваченная группа.
Измените URL с помощью узловых модулей path
или url
и верните захваченную группу (ниже я назвал этот аргумент imagePath
).Поскольку мы также заменяем ](
, это должно быть включено в возвращаемое значение.
const url = require('url');
const replacedText = data.toString().replace(regex, (fullResult, imagePath) => {
const newImagePath = url.resolve('http://www.example.org', imagePath)
return `](${newImagePath}`;
})
См. Пример repl, чтобы увидеть его в действии. Примечание: вПример repl записывается в другой файл.Используйте то же имя файла, если вы хотите перезаписать.