In a recent project, I worked with Markdown files that contained metadata at the top for blog posts. I needed to parse the Markdown with JavaScript and make a set of key/value pairs.
As you can see, the metadata is encapsulated in – – – with the metadata contained within.
// Function to parse metadata from a markdown file
const parseMarkdownMetadata = markdown => {
// Regular expression to match metadata at the beginning of the file
const metadataRegex = /^---([\\s\\S]\*?)---/;
const metadataMatch = markdown.match(metadataRegex);
// If there is no metadata, return an empty object
if (!metadataMatch) {
return {};
}
// Split the metadata into lines
const metadataLines = metadataMatch[1].split("\\n");
// Use reduce to accumulate the metadata as an object
const metadata = metadataLines.reduce((acc, line) => {
// Split the line into key-value pairs
const [key, value] = line.split(":").map(part => part.trim());
// If the line is not empty add the key-value pair to the metadata object
if(key) acc[key] = value;
return acc;
}, {});
// Return the metadata object
return metadata;
};
You can call this function and pass in the markdown file content. It will return an object with the metadata.
const markdown = \`---
title: My Blog Post
author: John Doe
date: 2021-01-01
---
# My Blog Post
This is the content of my blog post.\`;
var metadata = parseMarkdownMetadata(markdown);
console.log(metadata);
// Output: { title: "My Blog Post", author: "John Doe", date: "2021-01-01" }
The great thing about this solution is it requires no additional libraries. It’s all plain Javascript.