Изменить источник изображения в тексте Markdown, используя Node JS - PullRequest
0 голосов
/ 17 октября 2018

У меня есть текст разметки, содержащий ссылки на изображения, но это относительные пути, и мне нужно изменить их на абсолютные пути, используя скрипт NodeJS.Есть ли способ добиться того же самого простым способом?

Пример:

Источник

![](myImage.png?raw=true)

Результат

![](www.example.com/myImage.png?raw=true)

У меня есть несколько изображенийв содержании markdwon, которое мне нужно изменить.

1 Ответ

0 голосов
/ 17 октября 2018

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

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...