我有一些包含图像引用的markdown文本,但它们是相对路径,我需要使用NodeJS脚本将其修改为绝对路径。有什么方法可以通过简单的方式实现相同目的吗?

例:

资源

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


结果

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


我需要修改markdwon内容中的多个图像。

最佳答案

检查以下工作示例:https://repl.it/repls/BlackJuicyCommands

首先,您需要使用fs.readFile()读取文件并将Buffer解析为string

现在您可以访问文件的文本,需要用新的图像路径替换每个图像路径。捕获它的一种方法是使用regular expression。例如,您可以查找](ANY_IMAGE_PATH.ANY_IMAGE_EXTENSION。我们只对替换ANY_IMAGE_PATH部分感兴趣。

正则表达式的一个示例可能是(可以改进!)(请在此处实时查看它的实作:https://regex101.com/r/xRioBq/1):

const regex = /\]\((.+)(?=(\.(svg|gif|png|jpe?g)))/g


这将查找文字],后跟文字(,后跟任意序列(即.+),直到找到文字.,后跟svggifpng,或jpeg / jpg。正则表达式后的g是匹配所有事件(不仅是第一个事件)所必需的。

Javascript /节点(does not support lookbehind。我在图像路径之前使用了正则表达式,其中包括](,然后稍后将其过滤掉(或者您可以使用更复杂的正则表达式)。

(.+)将图像路径捕获为一组。然后,您可以使用字符串的替换功能。 replace函数接受正则表达式作为第一个参数。第二个参数可以是一个函数,它将完全匹配(在这种情况下为](image_path_without_extension,然后是所有捕获的组作为以下参数)作为第一个参数。

node.js - 使用Node JS更改Markdown文本中的图像源-LMLPHP

使用节点模块pathurl更改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}`;
})


See the repl example to see it live in action.注意:在repl示例中,它被写入另一个文件。如果要覆盖,请使用相同的文件名。

关于node.js - 使用Node JS更改Markdown文本中的图像源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52852425/

10-12 19:50
查看更多